我现在正在实现一些图算法,我想要一个具有斐波纳契堆或松散堆的复杂性的容器(特别是我想要至少O(logN)用于push和pop以及O(1)for reduce_key)。
如果可能的话(开发和测试开销和时间),我并不热衷于自己实现这一点,并且我注意到boost图库引用了挂起目录中的几个可能正在查看的数据结构。 relaxed_heap.hpp中的轻松堆查找票证,但我无法弄清楚如何使用它。它具有以下公共功能(为了清晰起见而略微准备):
void push(const value_type& x);
value_type& top();
void pop();
哪个足够清晰并实现我想要的推送和弹出。此外还有:
void update(const value_type& x);
void remove(const value_type& x);
我假设我可以使用更新来实现reduce_key,但我不清楚如何。我的特殊问题是我假设在调用push时复制了该值。我觉得我需要的是指向堆中值的副本的指针,以便我可以通过引用对其进行修改,然后调用update以将其拖曳回到它所属的位置。但是这样的指针似乎不可用?
任何一般都有轻松堆积体验的人,或者特别愿意通过解释或不错的代码片段让我摆脱困境的轻松堆积?
谢谢,
亚历
答案 0 :(得分:1)
亚历克斯, 如果你签出/下载/浏览boost库,那就有一个libs / graph / test目录。其中一个测试是relaxed_heap_test.cpp,它似乎覆盖了更新成员函数。
-s -