优雅的顺序比较方式(C++)

jca*_*cai 3 c++ comparison class

假设我有一个包含多个成员变量的类:

class MyClass{
    std::string a;
    int b;
    SomeOtherClass c;
    // some stuff...
public:
    // some other stuff...
};
Run Code Online (Sandbox Code Playgroud)

我想定义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;
}
Run Code Online (Sandbox Code Playgroud)

等等.有没有更优雅的方式来做到这一点?这看起来很麻烦,特别是如果要比较很多成员变量的话.(提升是一种选择.)

Moo*_*uck 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;
} 
Run Code Online (Sandbox Code Playgroud)

http://coliru.stacked-crooked.com/view?id=dd70799c005e6e99c70ebda552161292-c96156d6cc95286981b0e9deef2eefae

要么

bool operator<(MyClass param){
    return std::tie(a, b, c)<std::tie(param.a, param.b, param.c);
}
Run Code Online (Sandbox Code Playgroud)

http://coliru.stacked-crooked.com/view?id=00278eaca0d73b099fcd8edf87b5057b-c96156d6cc95286981b0e9deef2eefae