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

boost priority queue, see if element is already in the queue

本文关键字:队列 是否 元素 优先级      更新时间:2023-10-16

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

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

我的队列设置是这样的:

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值与传递到方法块中的节点进行比较?

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

例如,您可以使用斐波那契堆,其push()产生handle_type。您可以将此值存储在节点中,稍后与 increase()decrease() 一起使用来调整堆中节点的优先级。