我有一个事件的优先级队列,但有时事件优先级会发生变化,所以我想维护从事件请求者到堆的迭代器。如果优先级发生变化,我希望在log(n)时间内调整堆。我总是有一个迭代器指向堆中的每个元素。
发布于 2012-03-02 04:41:08
我很高兴地告诉大家,Boost现在已经添加了一个带有一些stellar data structures的Boost.Heap library。
这样做的好处是Fibonacci堆支持在固定的分期时间内更改优先级。
不幸的是,所有的可变堆都是基于节点的(换句话说,正如@wilx所建议的,它们具有额外的间接性)。@Feruccio对Boost的“可变堆”的回答有这样的代码,如果你愿意在你的值类型中包含指向句柄的指针,你就可以编写基于向量的可变堆。
发布于 2009-05-29 19:30:45
看看Boost的mutable heaps吧。
发布于 2009-05-29 19:17:27
这听起来像是你需要更多间接的东西。改为将指向事件的指针存储在优先级队列中。当队列中某些元素的优先级发生变化时,将其移除并重新插入。
https://stackoverflow.com/questions/927631
复制相似问题