删除优先级队列中的元素,而不是C+中的顶层元素+; 是否存在用于删除C++ STL优先级队列中给定元素(除了顶部元素)的内置函数?如果不是,如何在O(log n)中删除它?我应该从头开始为这个“删除”功能实现堆数据结构吗 是否存在删除C++ STL?优先级队列类中给定元素(除了顶部元素)的内置函数?

删除优先级队列中的元素,而不是C+中的顶层元素+; 是否存在用于删除C++ STL优先级队列中给定元素(除了顶部元素)的内置函数?如果不是,如何在O(log n)中删除它?我应该从头开始为这个“删除”功能实现堆数据结构吗 是否存在删除C++ STL?优先级队列类中给定元素(除了顶部元素)的内置函数?,c++,data-structures,stl,heap,priority-queue,C++,Data Structures,Stl,Heap,Priority Queue,没有 如果没有,如何在O(日志n)中删除它 通过使用另一个容器std::set是最简单的折衷方案。自定义堆实现可能更为优化。没有用于删除优先级队列中给定元素(顶部元素除外)的内置函数 我建议您使用std::set,它通过实现二叉树来执行O(logN)中的操作。但如果您需要更高的时间复杂度,请使用std::unordered_set,它在O(1)时间中执行操作并使用哈希 因此,我的建议是,使用std::set或std::unordered\u set&不要将自己局限于优先级队列 如果需要从容器中删

没有

如果没有,如何在O(日志n)中删除它


通过使用另一个容器
std::set
是最简单的折衷方案。自定义堆实现可能更为优化。

没有用于删除优先级队列中给定元素(顶部元素除外)的内置函数

我建议您使用std::set,它通过实现二叉树来执行O(logN)中的操作。但如果您需要更高的时间复杂度,请使用std::unordered_set,它在O(1)时间中执行操作并使用哈希


因此,我的建议是,使用std::setstd::unordered\u set&不要将自己局限于优先级队列

如果需要从容器中删除任意元素,那么队列可能不是正确的选择?您在其上进行排序插入的
std::deque
怎么样?您可以轻松地将其封装在一个容器适配器中,该适配器具有与
std::priority\u queue
类似的接口。顺便说一句,std::vector是比“从头开始实现”更好的默认设置。它没有O(logn)擦除,但是它有O(0)复杂度来获得正确的实现;)