嗨,我想知道如果给定一个std::priority_queue,是否有一种方法可以将堆的顺序从最小堆改为最大堆,反之亦然?我并不是说用greater定义一个优先级队列,我的意思是我们已经有了一个包含一些元素的priority_queue。
我基本上是想打印元素在相反的顺序从优先级队列,而弹出。
现在我意识到元素可以被加载到一个堆栈中,然后从堆栈中弹出,这会改变顺序,但我想在原地完成,而不使用额外的内存,或者为此编写我自己的堆实现。
有办法吗?
示例:
std::priority_queue<int> pq{};
pq.push(1);
pq.push(2);
pq.push(3);
while(!pq.empty()){
std::cout << pq.top();
pq.pop(); //this would print 321, but I would simply like 123, reversed.
//but don't change the declaration of the priority_queue. Reverse it when it has its elements inside of it.
}
1条答案
按热度按时间ntjbwcob1#
您已将问题标记为heap。这是一个很好的提示,为什么不用它来代替优先级队列呢?
你可以在堆中改变一个比较函数,并随时重新创建它。