gpt4 book ai didi

c++ - 运算符重载器没有影响

转载 作者:行者123 更新时间:2023-11-28 05:58:00 25 4
gpt4 key购买 nike

我正在尝试创建一个采用优先级队列并反转优先级的类。我包括一个 bool operator<()作为类的成员函数运行,但无论我如何构造此函数,该运算符似乎永远不会重载。

这是我的类(class):

template<typename T>
class MinPQ{

public:

bool empty() const {
return pq.empty();
}

unsigned int size() const {
return pq.size();
}

void push(const T& element){
pq.push(element);
}

const T& min() const {
return pq.top();
}

void remove_min(){
pq.pop();
}

bool operator<(const T& element) const {
return pq < element;
}

private:

priority_queue<T> pq;
};

编辑

我还尝试将重载函数更改为以下内容,但不明白为什么它也不起作用。

bool operator<(const T& element){
return this < element;
}

最佳答案

你的 operator<是没有意义的。它唯一能做的就是比较 MinPQ<T>对象 T目的。如果你想比较两个 T你应该这样做的对象:

1) 如果模板类型T可以只采用少数类型,您可以为这些类型中的每一种显式编写比较运算符:

bool operator<(const T& lhs, const T& rhs)
{
return lhs > rhs;
}

注:每个operator<应该是一个非成员函数。或类 T 的成员函数用一个参数。

2) 写一个比较仿函数:

template <class T> struct CompareT
{
bool operator()(const T& lhs, const T& rhs) const
{
return lhs > rhs;
}
};

然后声明pq成员如下:

priority_queue<T, std::vector<T>, CompareT<T>> mq;

3) 如果你只想颠倒优先级,你可以简单地使用 std::greater类:

priority_queue<T, std::vector<T>, std::greater<T>> mq;

关于c++ - 运算符重载器没有影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33803345/

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