gpt4 book ai didi

c++ - 删除 priority_queue minheap 中的一个元素

转载 作者:行者123 更新时间:2023-11-30 04:41:13 28 4
gpt4 key购买 nike

我正在尝试对 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 >
{

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

关于c++ - 删除 priority_queue minheap 中的一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59174801/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com