删除 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 >
{
从标准库派生 类 通常不是一个好主意,封装是更好的方法。
我正在尝试对 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 >
{
从标准库派生 类 通常不是一个好主意,封装是更好的方法。