我试图确定一个元素是否存在于boost :: heap :: binomial_heap中,因为我需要知道是否应该调用update()(如果节点已经存在)或push()(如果节点不存在)存在)。有些队列为此提供了push_or_update()函数。我唯一能做的就是保留一个属性映射,其索引类型与队列中的节点和value_type“handle_t”相同。然后我可以在地图中查找该项是否具有有效句柄,以便我可以推送它,如果它没有,或者如果它有更新。
有更好的方法吗?
答案 0 :(得分:0)
这不是二项式堆应该做的事情。
解决问题的常用方法是:使用哈希映射(或您喜欢的其他数据结构)来存储值与handle
之间的映射。然后,您可以查询句柄的哈希映射。如果存在,则此句柄将允许您修改堆中的值。如果它不存在,您只需向堆中添加一个新值(当然,以及哈希映射中的新映射)
解决问题的另一种方法是使用树集/映射,这比我上面描述的解决方案更容易并且可能更有效,具体取决于实际用例。