Определение operator <для структуры

Иногда я использую маленькие структуры в качестве ключей на картах, поэтому мне приходится определять для них operator <. Обычно это выглядит примерно так:

struct MyStruct
{
    A a;
    B b;
    C c;

    bool operator<(const MyStruct& rhs) const
    {
        if (a < rhs.a)
        {
           return true;
        }
        else if (a == rhs.a)
        {
            if (b < rhs.b)
            {
                return true;
            }
            else if (b == rhs.b)
            {
                return c < rhs.c;
            }
        }

        return false;
    }
};

Это кажется ужасно подробным и подверженным ошибкам. Есть ли лучший способ или какой-то простой способ автоматизировать определение operator < для struct или класса ?

Я знаю, что некоторым людям нравится просто используйте что-то вроде memcmp (this, & rhs, sizeof (MyStruct)) <0 , но это может работать некорректно, если между членами есть байты заполнения или если есть char строка массивы, которые могут содержать мусор после нулевого терминатора.

56
задан 4 revs 18 April 2013 в 17:58
поделиться