我有课程tranzitie
和map<int, map<tranzitie, int>>
。我应该如何重载<
tranzitie
运算符以使地图正常工作?它包含两个字符和一个字符串。我试过了,但是发现()不会很好,考虑到价值相等,即使它们不是(在我看来)。
class tranzitie{
public:
char litera;
char top;
string newst;
bool operator==(const tranzitie& x);
tranzitie& operator=(const tranzitie& x);
tranzitie (const tranzitie& x);
tranzitie(){};
inline bool operator< (const tranzitie& rhs) const;
};
答案 0 :(得分:1)
首选实现operator<
作为自由函数而不是成员函数。如果您需要访问operator<
函数中的私有成员,则应将operator<
函数设为朋友。在您的情况下,由于tranzitie
的成员是公开的,因此不需要它。
最容易记住的模式可能就是:
bool operator<(const tranzitie& lhs, const tranzitie& rhs) {
if (lhs.litera < rhs.litera) return true;
if (rhs.litera < lhs.litera) return false;
if (lhs.top < rhs.top) return true;
if (rhs.top < lhs.top) return false;
return lhs.newst < rhs.newst;
}
记住的最佳模式可能就是:
bool operator<(const tranzitie& lhs, const tranzitie& rhs) {
return
std::tie(lhs.litera, lhs.top, lhs.newst) <
std::tie(rhs.litera, rhs.top, rhs.newst);
}
答案 1 :(得分:0)
您应该比较所有数据成员:
bool operator< (const tranzitie& rhs) const {
if( litera == rhs.litera ) {
if( top == rhs.top ) {
return newst < rhs.newst;
}
return top < rhs.top;
}
return litera < rhs.litera;
}