【问题标题】:boost priority queue, see if element is already in the queue提升优先级队列,查看元素是否已经在队列中
【发布时间】:2013-12-30 01:58:11
【问题描述】:

我需要上述的寻路功能。

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

我的队列设置如下:

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

【问题讨论】:

  • 你应该使用*it

标签: c++ boost heap priority-queue


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2022-01-18
    • 2013-05-06
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多