运算符overloader没有影响

时间:2015-11-19 12:00:00

标签: c++ operator-overloading priority-queue

我正在尝试创建一个获取优先级队列并反转优先级的类。我包含一个{"date": "12-12-14", "name": "testname", "id": "1234"}函数作为类的成员函数,但无论我如何构造此函数,操作符似乎都不会过载。

这是我的班级:

bool operator<()

修改

我还尝试将重载功能更改为以下内容,并且不会丢失为什么它也不起作用。

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;
};

1 个答案:

答案 0 :(得分:1)

你的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 class:

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