假设我有一个包含多个成员变量的类:
class MyClass{
std::string a;
int b;
SomeOtherClass c;
// some stuff...
public:
// some other stuff...
};
我想定义首先比较operator<
的关系运算符(a
等),但如果a
相等,则比较b
,但如果{ {1}}相等,比较b
。 (我们假设c
已经定义了关系运算符。)所以我有类似
SomeOtherClass
等等。有没有更优雅的方式来做到这一点?这看起来很麻烦,特别是如果要比较很多成员变量的话。 (Boost是一种选择。)
答案 0 :(得分:7)
是的,我通常会看到两种方式:
bool operator<(MyClass param){
if(a != param.a) return a<param.a;
if(b != param.b) return b<param.b;
return c<param.c;
}
或
bool operator<(MyClass param){
return std::tie(a, b, c)<std::tie(param.a, param.b, param.c);
}
答案 1 :(得分:3)
当然,您可以使用std::tie
:
#include <tuple>
bool operator<(const MyClass& lhs, const MyClass& rhs)
{
return std::tie(lhs.a, lhs.b, lhs.c) < std::tie(rhs.a, rhs.b, rhs.c);
}
答案 2 :(得分:3)