运算符重载器没有影响

Operator overloader not making an affect

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

这是我的 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<应该是一个非成员函数。或 class 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 class:

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