簡體   English   中英

使用自定義比較器(實現最小堆)實例化 int 對的 priority_queue 時 C++ 中的類型錯誤

[英]Type error in C++ when instantiating a priority_queue of int pairs with a custom comparator (to implement a min heap)

目前正在解決我需要最小堆對的 leetcode 問題。
我正在嘗試將priority_queueint pair和自定義比較類型一起使用。
執行相同的嘗試失敗並出現以下錯誤:

在 prog_joined.cpp:1 中包含的文件中:在 /precompiled/headers.h:55 中包含的文件中:在 /usr/bin/../lib/gcc/x86_64-linux-gnu/9/.. 中包含的文件中/../../../include/c++/9/queue:64: /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../。 ./include/c++/9/bits/stl_queue.h:467:7: error: static_assert 由於要求'is_same<int, std::pair<int, int>>::value' "value_type 必須相同而失敗作為底層容器” static_assert(is_same<_Tp, typename _Sequence::value_type>::value, ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~ 第 9 行:字符 67:注意:在模板 class 'std::priority_queue<int, std::vector<std 的實例化中::pair<int, int>, std::allocator<std::pair<int, int>>>, std::greater>' 在此請求 priority_queue<int, vector<pair<int, int>>, Greater> pq;

這是我試圖實現堆的代碼:

#include <queue>
#include <utility>
using namespace std;
//...
priority_queue<int, pair<int, int>, greater<int>> pq;

正如您在std::priority_queue文檔中看到的:

  • 第一個模板參數是數據類型(在您的情況下應該是pair<int,int> )。
  • 第二個模板參數應該是用於隊列的底層容器類型。
  • 第三個應該是比較類型。

例如,如果您想要一個使用std::vector作為容器的int pairpriority_queue您需要:

std::priority_queue<std::pair<int, int>,                  // data type
                    std::vector<std::pair<int,int>>,      // container type
                    std::greater<std::pair<int,int>>> pq; // compare type

注意:正如您在此處看到的, std::greater使用的比較運算符的std::pair實現是:

通過 operator< 按字典順序比較 lhs 和 rhs,即比較第一個元素,只有當它們相等時,才比較第二個元素。

如果這不是您需要的,您可以為std::pair<int,int>實現自己的比較類型。

附注:最好避免using namespace std 見這里: 為什么“使用命名空間標准;” 被認為是不好的做法? .

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM