【问题标题】:Determine if a node exists in a Boost binomial_heap判断 Boost binomial_heap 中是否存在节点
【发布时间】:2012-09-05 22:52:26
【问题描述】:

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

有没有更好的方法来做到这一点?

Here is the doc for reference.

【问题讨论】:

    标签: c++ boost


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多