C ++中是否有一个支持更改除head之外的元素优先级的堆类?

时间:2009-05-29 19:08:21

标签: c++ stl boost heap priority-queue

我有一个事件的优先级队列,但有时事件优先级会发生变化,所以我想将事件请求者的迭代器维护到堆中。如果优先级发生变化,我希望在log(n)时间内调整堆。我将始终只有一个迭代器指向堆中的每个元素。

4 个答案:

答案 0 :(得分:10)

看看Boost的mutable heaps

答案 1 :(得分:3)

我很高兴地报告Boost现在添加了Boost.Heap library一些stellar data structures

这样做的好处是Fibonacci堆支持在不变的摊销时间内改变优先级。

不幸的是,所有可变堆都是基于节点的(换句话说,它们具有@wilx建议的额外间接)。 @ Feruccio对Boost的“可变堆”的回答有一些代码,如果你愿意有指向你的值类型中包含的句柄的指针,它就可以编写基于向量的可变堆。

答案 2 :(得分:2)

听起来你需要更多的间接性。存储指向优先级队列中事件的指针。当队列的某个元素的优先级发生变化时,将其删除并重新插入。

答案 3 :(得分:0)

这里的警告是你最终得到不稳定的事件排序,即未定义具有相同优先级的事件的排序(读取'它们将被重新排序'。)