Я иногда использую маленькие structs как ключи на картах, поэтому мне нужно определить 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 или class?
Я знаю, что некоторым людям нравится просто использовать что-то вроде memcmp(this, &rhs, sizeof(MyStruct)) < 0, но это может работать некорректно, если между членами есть пробельные байты или существуют массивы строк char, которые могут содержать мусор после нулевых терминаторов.