我需要上述功能进行寻路。
我正在使用提升队列,因为它显然允许我这样做。
我的队列设置如下:
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
值与传递给方法块的节点进行比较?
答案 0 :(得分:1)
如果每次迭代队列,都会破坏算法的性能保证。相反,您应该在将新条目添加到队列中时存储从队列返回的句柄,并使用句柄可能更新条目的优先级。但是,您可能需要使用其中一个基于节点的优先级队列。
你可以,例如使用push()
生成handle_type
的{{3}}。您将此值存储在节点中,稍后与increase()
或decrease()
一起使用以调整堆中节点的优先级。