[英]Priority Queue Not Comparing Correctly C++
我正在嘗試創建一個由成對的int和char組成的優先級隊列,它為我提供了更大的int對,但是我的代碼無法正常工作。 我究竟做錯了什么?
這是我的比較器類:
class Compare
{
public:
bool operator() (pair<int, char>a, pair<int, char>b)
{
return a.first > b.first;
}
};
這是我的優先隊列:
priority_queue<pair<int, char>, vector<pair<int, char>>, Compare> party;
但是,如果我執行代碼:
party.push(make_pair(2, 'A'));
party.push(make_pair(3, 'B'));
cout<<party.top().first;
它返回2,而不是3。如何解決優先級隊列的實現?
Geordi La Forge將使用的相同解決方法:反轉極性:
bool operator() (const pair<int, char> &a, const pair<int, char> &b) const
{
return a.first < b.first;
}
比較功能始終執行嚴格的弱排序,也就是邏輯<
操作。 但是priority_queue
,顧名思義, 讓您在優先級隊列,首先最大的價值 :
...提供對最大(默認)元素的恆定時間查找,
但是比較功能仍然嚴格弱排序:
提供嚴格的弱排序的比較類型。
有點違反直覺,但過了一會兒,確實有道理...
PS:比較函數應為const
函數,並采用const
參數以提高效率,如我的示例所示; 但這是一個額外的細節。
優先級隊列期望Comparator的實現less
-就像其他任何需要弱排序的容器一樣。 但是,它通過將較大的元素放在頂部而起作用。 由於您有效地實現了greater
,因此您顛倒了隊列,現在最小的元素排在最前面。
要解決此問題,請更改比較器以返回兩個元素中的較小者。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.