我想做这样的事情:
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
位于队列顶部的对的优先级队列?
答案 0 :(得分:19)
你试过这个吗?
typedef pair<int, int> P;
priority_queue< P, vector<P>, greater<P> > Q;
这将给出operator<
的正常pair<int, int>
的反向排序,它将从最小first
打破最小second
的{{1}}开始。
如果你想先按最小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;
答案 1 :(得分:1)
就我所见,你应该在这里创建自己的域类而不是pair<int, int>
。然后,您可以根据需要重载>
。