簡體   English   中英

優先隊列未正確比較C ++

[英]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.

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