我需要B类拥有AToTime对象的最小优先级队列。
AToTime有operator>
,但是我收到的错误告诉我的是没有运营商>匹配操作数......
#include <queue>
#include <functional>
using namespace std;
class B
{
public:
B();
virtual ~B();
private:
log4cxx::LoggerPtr m_logger;
class AToTime
{
public:
AToTime(const ACE_Time_Value& time, const APtr a) : m_time(time), m_a(a){}
bool operator >(const AToTime& other)
{
return m_time > other.m_time;
}
public:
ACE_Time_Value m_time;
APtr m_a;
};
priority_queue<AToTime, vector<AToTime>, greater<AToTime> > m_myMinHeap;
};
答案 0 :(得分:9)
bool operator >(const AToTime& other)
它应该是一个const函数。
bool operator >(const AToTime& other) const
答案 1 :(得分:1)
Kenny's answer已经向您展示了如何使这项工作。
请注意,我更愿意实现二进制运算符,它们将它们的操作数平等地处理(它们不会修改它们)作为自由函数:
inline bool operator>(const AToTime& khs, const AToTime& rhs)
{
return lhs.m_time > rhs.m_time;
}
此外,通常用户希望所有关系运营商都存在,如果其中一个存在。由于std库主要需要operator<
,除了相等之外,我会在operator<
之上实现其他库:
inline bool operator<(const AToTime& khs, const AToTime& rhs)
{return lhs.m_time < rhs.m_time;}
inline bool operator>(const AToTime& khs, const AToTime& rhs)
{return rhs < lhs;}
inline bool operator<=(const AToTime& khs, const AToTime& rhs)
{return !(lhs > rhs);}
inline bool operator>=(const AToTime& khs, const AToTime& rhs)
{return !(lhs < rhs);}
inline bool operator==(const AToTime& khs, const AToTime& rhs)
{return lhs.m_time == rhs.m_time;}
inline bool operator!=(const AToTime& khs, const AToTime& rhs)
{return !(lhs.m_time == rhs.m_time);}