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。如何修复优先级队列的实现?
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参数,以提高效率,如我的示例所示;但这是一个额外的细节。