增加优先级队列的优先级

时间:2014-10-23 09:46:21

标签: c++ c++11 priority-queue

我想降低优先级队列中元素的优先级?如何在对数时间内实现这一目标?

我知道优先级队列是作为最大堆实现的。但是如果我修改队列中的任何元素然后在其上调用make_heap,则元素数量将需要线性时间。

参考:http://www.cplusplus.com/reference/queue/priority_queue/

2 个答案:

答案 0 :(得分:3)

以对数复杂度执行更新的唯一方法是自己实现优先级队列,因此您可以使用well-known algorithms

标准未指定std::priority_queue的实现(例如,它可能是d-ary heap),因此您无法在不重建队列的情况下轻松更新优先级。出于同样的原因,您无法使用std::make_heap及相关功能。

答案 1 :(得分:1)

您无法使用std::priority_queue执行此操作。但是,如果您可以访问堆的内部结构,则可以进行访问。如果你有一个指向元素的指针,你可以降低元素的优先级,然后只使用siftDown过程来修复这个元素。