我正在寻找一种可以保持其元素排序的良好数据结构。目前我正在尝试Boost.Heap。
我经常需要有序地遍历数据结构,并在到达基于某些属性的元素时,更新其优先级。Boost.Heap 优先级队列提供有序和无序迭代器。元素更新通过节点句柄发生,句柄可以从普通的无序迭代器中获取,但不能直接从有序迭代器中获取,如下例所示:
#include <iostream>
#include <algorithm>
#include <boost/heap/fibonacci_heap.hpp>
using namespace boost::heap;
int main()
{
fibonacci_heap<int> fib_heap;
fib_heap.push(1);
fib_heap.push(2);
fib_heap.push(3);
for(auto i = fib_heap.ordered_begin(); i != fib_heap.ordered_end(); ++i)
{
// no viable conversion here
auto h = fibonacci_heap<int>::s_handle_from_iterator(i);
if(*h == 2) // dumb test
{
fib_heap.increase(h, *h + 2);
break;
}
}
std::for_each(fib_heap.ordered_begin(), fib_heap.ordered_end(),
[](const int &e)
{
std::cout << e << std::endl;
});
}
如何有序地遍历队列并更新遍历中的元素?
请注意,我在更新后离开了遍历。
(欢迎为此目的提供替代库的建议)