本文介绍了如何从priority_queue中删除不在顶部的元素?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在我的程序中,我需要从不在顶部的优先级队列中删除一个元素。能做到吗?如果不是,请提出一个建议的方法,除了创建自己的堆。
In my program I need to delete an element from a priority queue that is not at the top. Can that be done? If not, please suggest a way to do so except creating your own heap.
推荐答案
标准 priority_queue< ; T>
可以通过继承进行自定义。它具有受保护的成员 c
和 comp
,可以在子孙类中对其进行引用。
The standard priority_queue<T>
can be customized through inheritance. It has protected members c
and comp
that can be referenced in a descendant class.
template<typename T>
class custom_priority_queue : public std::priority_queue<T, std::vector<T>>
{
public:
bool remove(const T& value) {
auto it = std::find(this->c.begin(), this->c.end(), value);
if (it != this->c.end()) {
this->c.erase(it);
std::make_heap(this->c.begin(), this->c.end(), this->comp);
return true;
}
else {
return false;
}
}
};
void main()
{
custom_priority_queue<int> queue;
queue.push(10);
queue.push(2);
queue.push(4);
queue.push(6);
queue.push(3);
queue.remove(6);
while (!queue.empty())
{
std::cout << queue.top();
queue.pop();
if (!queue.empty())
{
std::cout << ", ";
}
}
}
输出:
10、4、3、2
这篇关于如何从priority_queue中删除不在顶部的元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!