3

いくつかのメンバー変数を持つクラスがあるとします。

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;
}

等々。これを行うためのよりエレガントな方法はありますか?特に比較するメンバー変数が多数ある場合は、かなり面倒に思えます。(ブーストはオプションです。)

4

3 に答える 3

3

もちろん、次を使用できますstd::tie

#include <tuple>

bool operator<(MyClass param){
    return std::tie( a, b, c ) < std::tie( param.a, param.b, param.c );
}

を作成しtuple、その後は を使用するだけですoperator<

この演算子は、タプルの各要素を比較します。

于 2013-08-21T17:28:40.840 に答える