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

har*_*hit 4 c++

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

priority_queue<<Node>,vector<Node>,myComp> openQ
Run Code Online (Sandbox Code Playgroud)

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

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

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

Kir*_*sky 5

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

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

  • 这实际上是令人失望的,所以它的用途是有限的.我需要问题中提到的相同的东西,但似乎必须滚动我自己.在我的例子中,我有一个我称之为ConnectionProcessors的PriorityQueue,它允许我的服务器跨线程进行负载平衡(每个ConnectionProcessor都有一个运行在其上的线程); 由于客户端可以删除连接,因此必须重新排序PriorityQueue,因此我必须删除ConnectionProcessor并重新添加它.并且连接处理器可以在优先级队列中的任何位置,所以我无法删除它,在我看来,这是愚蠢的. (3认同)