对的优先级队列以相反的顺序排列

时间:2012-05-26 10:51:18

标签: c++ priority-queue

我想做这样的事情:

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

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

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

然而,显然使用pair<int, int>,无法将队列中的对与标准>进行比较。我想知道我应该怎么做?我如何实现重载>或者是否有另一种方法可以创建一个最小pair.second位于队列顶部的对的优先级队列?

2 个答案:

答案 0 :(得分:19)

你试过这个吗?

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

这将给出operator<的正常pair<int, int>的反向排序,它将从最小first打破最小second的{​​{1}}开始。

如果你想先按最小secondfirst秒(!)进行排序,那么你需要一个新的排序算子:

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;

答案 1 :(得分:1)

就我所见,你应该在这里创建自己的域类而不是pair<int, int>。然后,您可以根据需要重载>