代码之家  ›  专栏  ›  技术社区  ›  harshit

在C++ STL中从优先级队列中删除元素

c++
  •  3
  • harshit  · 技术社区  · 16 年前

    我有带声明的优先级队列吗

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

    我正在将节点对象插入其中。但有时我不得不删除其中的元素。(不移除顶部元件)

    当前要删除它,我将弹出元素并将其放入数组中。如果最上面的元素是需要的,那么期望它,我推数组中的其他元素。

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

    2 回复  |  直到 7 年前
        1
  •  5
  •   Kirill V. Lyadvinsky    7 年前

    priority_queue 类被设计为用作具有优先级的队列。它的目的是用 pop 功能。如果你想得到不同的行为,你应该使用不同的类。例如, std::map .

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

        2
  •  1
  •   ColacX    12 年前

    STD::SET是OrdD,可以按值擦除元素。底层的数据结构是一个二叉搜索树,这就是为什么按值删除元素更便宜的原因。

    优先级队列必须在队列中进行线性搜索,因此它是可能的,但效率不高,这就是为什么它们不包括它。