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