提升优先级队列,查看元素是否已在队列中
boost priority queue, see if element is already in the queue
我需要上述功能进行寻路。
我正在使用提升队列,因为它显然允许我这样做。
我的队列设置是这样的:
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()
一起使用来调整堆中节点的优先级。
相关文章:
- 我是否需要在下一次转移时将所有权*转移回转移队列
- 堆栈和队列是否像C++中的数组一样传递?
- Vulkan 的传输队列系列功能和显卡支持:条件检查是否准确?
- 是否可以使用简单队列创建优先级队列
- 是否有一种有效的方法来搜索队列中的关键字并覆盖其值
- 如何检查队列是否使用 STL 排序
- 如何检查提升消息队列是否存在
- 如何查看Tibco EMS独享队列是否有活跃消费者?
- 弹出后,C++队列是否会销毁对象?
- 是否可以更改在优先级队列中添加具有相同优先级的"side"对象?
- 是否使用示波器队列:: swap违反任何规则来清空std ::队列
- 可以检查提升::无锁::队列是否已满吗?
- 使用无锁指针队列在线程之间移动数据是否安全
- stl 优先级队列中的堆管理是否调用复制构造函数
- 在 C++11 中,lambda 队列是否是工作队列的良好设计模式
- 提升优先级队列,查看元素是否已在队列中
- Boost 的无锁队列是否有可能丢失元素?
- C++ 检查队列是否已满
- 事件队列是否与用于跨线程信号/槽(在Qt中)的队列相同?
- 具有独立读线程和写线程的单个队列是否需要锁定