Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 提升优先级队列,查看元素是否已在队列中_C++_Boost_Heap_Priority Queue - Fatal编程技术网

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

C++ 提升优先级队列,查看元素是否已在队列中,c++,boost,heap,priority-queue,C++,Boost,Heap,Priority Queue,我需要上面的寻路功能 我使用的是boost队列,因为它显然允许我这样做 我的队列设置如下: typedef boost::heap::priority_queue<PathFindingNode *, boost::heap::compare<MyClassCompare> > MyPriorityQueue; 但是我不明白如何使用it值来与传递到方法块的节点进行比较?如果每次都遍历队列,那么算法的性能保证就会失效。相反,您应该在向队列中添加新条目时存储从队列返回的句柄

我需要上面的寻路功能

我使用的是boost队列,因为它显然允许我这样做

我的队列设置如下:

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)
{
}