删除 priority_queue minheap 中的一个元素

remove a element in priority_queue minheap

我正在尝试对 priority_queue STL 实施删除功能,但对于最小堆实施,它会引发错误。

#include <iostream>
#include <stdc++/bits>

using namespace std;
template<typename T>
class custom_priority_queue : public priority_queue<T, vector<T>>
{
  public:

      bool remove(const T& value) {
        auto it = find(this->c.begin(), this->c.end(), value);
        if (it != this->c.end()) {
            this->c.erase(it);
            make_heap(this->c.begin(), this->c.end(), this->comp);
            return true;
       }
       else {
        return false;
       }
 }
};

void findmedian(int arr[], int n, int k)
{
    custom_priority_queue<int> maxheap;

这工作正常,但如果我尝试创建如下所示的最小堆

    custom_priority_queue<int , vector<int>, greater<int>> minheap;

它抛出一个错误

    Too many template arguments for class template 'custom_priority_queue'

custom_priority_queue 只有一个模板参数 T。所以只能用custom_priority_queue<T>,更多的参数无效。

您需要将声明更改为:

template<typename T, Queue = std::vector< T >, Compare = std::less< T > >
class custom_priority_queue : public priority_queue<T, Queue, Compare >
{

从标准库派生 类 通常不是一个好主意,封装是更好的方法。