从c ++ stl中的优先级队列中删除元素

时间:2009-09-26 23:24:36

标签: c++

我是否有一个带声明的优先级队列

priority_queue<<Node>,vector<Node>,myComp> openQ

我将节点对象插入其中。但有时我必须从中删除元素。 (不要删除顶部元素)

目前要删除它我正在弹出元素并将其放入数组中。如果需要最顶层的元素,那么期望它推送数组中的其他元素。

这就像线性搜索和删除。我知道它没有效率,我正在寻找更好的方法

2 个答案:

答案 0 :(得分:5)

priority_queue类旨在用作具有优先级的队列。它旨在删除具有pop功能的元素。如果你想获得不同的行为,你应该使用不同的类。例如,std::map

如果您准备手动控制队列的一致性,可以查看std::make_heap。使用它创建最大堆很容易。但在这种情况下,每次要删除元素时都需要手动重建队列。

答案 1 :(得分:1)

std :: set是有序的,可以按值擦除元素。底层数据结构是二叉搜索树,这就是为什么按值擦除元素会更便宜。

优先级队列必须线性搜索队列,因此它可能但效率不高,这就是他们没有包含它的原因。