Я иногда использую маленькие 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
, которые могут содержать мусор после нулевых терминаторов.