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