c++ - 对的优先级队列以相反的顺序

标签 c++ priority-queue

我想做这样的事情:

priority_queue< pair<int, int>, vector<int>, greater<int> > Q;

如果我比较的类型是 int,这就可以正常工作,即:

priority_queue< int, vector<int>, greater<int> > Q;

但是,很明显 pair<int, int> , 无法将队列中的对与标准 > 进行比较.我在想我该怎么办?我将如何实现重载 >还是有另一种方法可以创建具有最小 pair.second 的对的优先级队列排在队首?

最佳答案

你试过吗?

typedef pair<int, int> P;
priority_queue< P, vector<P>, greater<P> > Q;

这将给出正常 operator< 的相反顺序对于 pair<int, int> , 将从最小的 first 开始与最小的打破平局second .

如果你想按最小的second排序首先和first第二个 (!) 然后你需要一个新的排序仿函数:

struct Order
{
    bool operator()(P const& a, P const& b) const
    {
        return a.second < b.second || a.second == b.second && a.first < b.first;
    }
}

然后使用:

priority_queue< P, vector<P>, Order > Q;

关于c++ - 对的优先级队列以相反的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10765586/

相关文章:

c++ - 嵌套 For 循环中的奇怪行为

python - 当 asyncio.PriorityQueue 处于 maxsize 并且我 put() 新项目时,如何将项目从 asyncio.PriorityQueue 中推出?

c++ - C++ 中优先级队列的时间复杂度

c++ - Haxe/openfl 文本字段内存泄漏

c++ - O(log n) 算法在预排序列表的 union 中查找具有等级 i 的元素

c++ - 在构造期间使用单例管理指针?

C++ 将类成员动态定义为对象或对另一个成员的引用

java数组转换?

algorithm - 二叉堆和二叉堆有什么区别?

algorithm - 澄清 Sedgewick "Algorithms"heapsort chapter remark(第 4 版,第 2.4 章)