0

我正在尝试确定 boost::heap::binomial_heap 中是否存在元素,因为我需要知道是否应该调用 update() (如果节点已经存在)或 push() (如果节点不存在)。一些队列正是为此目的提供了 push_or_update() 函数。我唯一能想到的就是保留一个与队列中的节点和 value_type 'handle_t' 具有相同索引类型的属性映射。然后我可以在地图中查找该项目是否具有有效句柄,以便如果没有,我可以推送,或者如果有则更新。

有一个更好的方法吗?

这是供参考的文档

4

1 回答 1

0

这不是二项式堆应该做的事情。

解决问题的常用方法是:使用哈希映射(或您喜欢的其他数据结构)来存储值和handles 之间的映射。然后,您可以查询句柄的哈希映射。如果存在,此句柄将允许您修改堆中的值。如果它不存在,您可以向堆中添加一个新值(当然,以及哈希映射中的新映射)

解决问题的另一种方法是使用树集/映射,这比我上面描述的解决方案更容易并且可能更有效,具体取决于实际用例。

于 2012-09-05T23:38:23.600 回答