我正在尝试创建一个获取优先级队列并反转优先级的类。我包含一个{"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;
};
答案 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;