假设我有一个包含多个成员变量的类:
class MyClass{
std::string a;
int b;
SomeOtherClass c;
// some stuff...
public:
// some other stuff...
};
我想定义首先比较 operator<
的关系运算符( a
等) , 但如果 a
相等,比较b
, 但如果 b
相等,比较c
. (我们假设 SomeOtherClass
已经定义了关系运算符。)所以我有类似的东西
bool operator==(MyClass param){
return (a == param.a) && (b == param.b) && (c == param.c);
}
bool operator<(MyClass param){
if(a < param.a) return true;
if(a > param.a) return false;
if(b < param.b) return true;
if(b > param.b) return false;
if(c < param.c) return true;
return false;
}
等等。有没有更优雅的方法来做到这一点?这看起来很麻烦,尤其是当有很多成员变量需要比较时。 (升压是一种选择。)
最佳答案
是的,我常见的有两种方式:
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);
}
关于c++ - 进行顺序比较的优雅方式 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18363859/