C++ 提升优先级队列,查看元素是否已在队列中
我需要上面的寻路功能 我使用的是boost队列,因为它显然允许我这样做 我的队列设置如下:C++ 提升优先级队列,查看元素是否已在队列中,c++,boost,heap,priority-queue,C++,Boost,Heap,Priority Queue,我需要上面的寻路功能 我使用的是boost队列,因为它显然允许我这样做 我的队列设置如下: typedef boost::heap::priority_queue<PathFindingNode *, boost::heap::compare<MyClassCompare> > MyPriorityQueue; 但是我不明白如何使用it值来与传递到方法块的节点进行比较?如果每次都遍历队列,那么算法的性能保证就会失效。相反,您应该在向队列中添加新条目时存储从队列返回的句柄
typedef boost::heap::priority_queue<PathFindingNode *, boost::heap::compare<MyClassCompare> > MyPriorityQueue;
但是我不明白如何使用
it
值来与传递到方法块的节点进行比较?如果每次都遍历队列,那么算法的性能保证就会失效。相反,您应该在向队列中添加新条目时存储从队列返回的句柄,并使用该句柄潜在地更新条目的优先级。但是,您可能需要使用一个基于节点的优先级队列
例如,您可以使用which
push()
生成一个句柄类型
。您可以将此值存储在节点中,然后与增加()
或减少()
一起使用,以调整堆中节点的优先级。然后应使用*它
。
typename MyPriorityQueue::iterator begin = self.queue->begin();
typename MyPriorityQueue::iterator end = self.queue->end();
for (typename MyPriorityQueue::iterator it = begin; it != end; ++it)
{
}