我正在查看this site中的stl::priority_queue
,我意识到如果我在优先级队列中插入一些值,例如8 - 95 - 15 - 30 - 29
,那么当我使用迭代器时,我会得到输出95 - 30 - 29 - 15 - 8
。
如何获得反向输出?,即从最小值到最大值。我认为这是因为默认情况下设置的堆用于按max到min对元素进行排序,但是如何更改呢?
如果可能的话,我想为堆的每个节点存储两个值。
例如:
myHeap.push(<1,2>)
myHeap.push(<1,25>)
myHeap.push(<2,5>)
顺序将由我订购的对的第二个组成部分决定。在此示例中,输出将为<1,2>; <1,25>; <2,5>
修改 priority_queue不是堆。抱歉称它为堆。
答案 0 :(得分:0)
由于您希望存储值对并使用对中的第二项进行比较,因此定义一个类来完成这项工作可能最简单。
class my_pair {
int a, b;
public:
my_pair(int a, int b) : a(a), b(b) {}
// reverse the normal ordering, and base on second item of pair:
bool operator<(my_pair const &other) const { return other.b < b; }
};
您可能至少需要更多成员(例如,从my_pair
对象中检索值),但这应该足以创建它们并将它们放入priority_queue。