我想做这样的事情:
priority_queue< pair<int,int>,vector<int>,greater<int> > Q;
如果我正在比较的类型是int,即:
priority_queue< int,greater<int> > Q;
然而,显然,对对< int,没有办法将队列中的对与标准> ;.我在想我该怎么办?如何实现重载>还是有另一种方式,我可以创建一个优先级队列,最小的pair.second位于队列的顶端?
解决方法
你试了吗
typedef pair<int,int> P; priority_queue< P,vector<P>,greater<P> > Q;
这将给出正常运算符的相反顺序,对于< int,它将以最小的第二个最小的第一个连接开始.
如果你想排序最小的第一和第一(!),那么你将需要一个新的排序函子:
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,Order > Q;
原文地址:https://www.jb51.cc/c/113746.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。