Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在尝试确定 boost::heap::binomial_heap 中是否存在元素,因为我需要知道是否应该调用 update() (如果节点已经存在)或 push() (如果节点不存在)。一些队列正是为此目的提供了 push_or_update() 函数。我唯一能想到的就是保留一个与队列中的节点和 value_type 'handle_t' 具有相同索引类型的属性映射。然后我可以在地图中查找该项目是否具有有效句柄,以便如果没有,我可以推送,或者如果有则更新。
有一个更好的方法吗?
这是供参考的文档。
这不是二项式堆应该做的事情。
解决问题的常用方法是:使用哈希映射(或您喜欢的其他数据结构)来存储值和handles 之间的映射。然后,您可以查询句柄的哈希映射。如果存在,此句柄将允许您修改堆中的值。如果它不存在,您可以向堆中添加一个新值(当然,以及哈希映射中的新映射)
handle
解决问题的另一种方法是使用树集/映射,这比我上面描述的解决方案更容易并且可能更有效,具体取决于实际用例。