提升优先级队列,查看元素是否已在队列中

时间:2013-12-30 01:58:12

标签: c++ boost heap priority-queue

我需要上述功能进行寻路。

我正在使用提升队列,因为它显然允许我这样做。

我的队列设置如下:

typedef boost::heap::priority_queue<PathFindingNode *, boost::heap::compare<MyClassCompare> > MyPriorityQueue;

我想创建一个方法,将PathFindingNode类型作为参数,然后检查此节点是否已经在队列中。

我发现我可以像这样迭代队列:

typename MyPriorityQueue::iterator begin = self.queue->begin();
typename MyPriorityQueue::iterator end = self.queue->end();

for (typename MyPriorityQueue::iterator it = begin; it != end; ++it)
{
}

但我不明白如何使用it值与传递给方法块的节点进行比较?

1 个答案:

答案 0 :(得分:1)

如果每次迭代队列,都会破坏算法的性能保证。相反,您应该在将新条目添加到队列中时存储从队列返回的句柄,并使用句柄可能更新条目的优先级。但是,您可能需要使用其中一个基于节点的优先级队列。

你可以,例如使用push()生成handle_type的{​​{3}}。您将此值存储在节点中,稍后与increase()decrease()一起使用以调整堆中节点的优先级。

相关问题