优先级队列无法正确比较 C++

Jih*_*Yin 2 c++ priority-queue

我正在尝试创建一个由 int, char 对组成的优先级队列,它为我提供了具有更大 int 的对,但我的代码无法正常工作。我究竟做错了什么?

这是我的比较器类:

class Compare
{
public:
    bool operator() (pair<int, char>a, pair<int, char>b)
    {
        return a.first > b.first;
    }
};
Run Code Online (Sandbox Code Playgroud)

这是我的优先级队列:

priority_queue<pair<int, char>, vector<pair<int, char>>, Compare> party;
Run Code Online (Sandbox Code Playgroud)

但是如果我执行代码:

party.push(make_pair(2, 'A'));
party.push(make_pair(3, 'B'));
cout<<party.top().first;
Run Code Online (Sandbox Code Playgroud)

它返回 2,而不是 3。如何修复优先级队列的实现?

Sam*_*hik 5

Geordi La Forge 使用的修复方法相同:反转极性:

bool operator() (const pair<int, char> &a, const pair<int, char> &b) const
{
    return a.first < b.first;
}
Run Code Online (Sandbox Code Playgroud)

比较函数始终实现严格的弱排序,即逻辑<运算。但是priority_queue,根据定义,为您提供优先级队列中的最大值,第一个:

...提供最大(默认)元素的恒定时间查找,

但比较函数仍然是严格的弱排序:

提供严格弱排序的比较类型。

有点违反直觉,但一段时间后,它确实有意义......

PS:比较函数应该是一个const函数,并且带const参数,以提高效率,如我的示例所示;但这是一个额外的细节。