我使用Boost 1.53.0中的boost::fibonacci_heap
类来维护可更新的优先级队列。
当我想要更新一个元素时,我需要将堆中的元素与我想要替换它的新元素进行比较。我只想用"较小"的版本替换堆中的元素,所以我想在更新之前对它们进行比较。
当我插入元素时,我会存储它们的句柄(boost::fibonacci_heap::handle_type
)。我在fibonacci_heap
的文档中看到的所有采用句柄类型的函数都只提供某种写访问(update()
、decrease()
、increase()
等),并且不允许我在更新句柄之前检查句柄标识的元素。
有没有办法只使用fibonacci_heap
中的句柄来查看元素?
您应该能够取消引用句柄。此处提供了一个示例:http://www.boost.org/doc/libs/1_50_0/doc/html/heap/concepts.html
站点示例
fibonacci_heap<heap_data> heap;
heap_data f;
fibonacci_heap<heap_data>::handle_type handle = heap.push(f);
(*handle).handle = handle; // store handle in node
所以只需调用
(*handle)
以获取对存储在堆中的类的引用。