A veces uso pequeñas structs
como claves en los mapas, por lo que tengo que definir un operator<
para ellas. Por lo general, esto termina pareciéndose a algo como esto:Operador que define <para una estructura
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;
}
};
Esto parece terriblemente prolijo y propenso a errores. ¿Hay una mejor manera, o de alguna manera fácil de automatizar definición de operator<
para un struct
o class
?
Sé que algunas personas como para simplemente usar algo como memcmp(this, &rhs, sizeof(MyStruct)) < 0
, pero esto puede no funcionar correctamente si hay bytes de relleno entre los miembros, o si hay char
matrices de cadenas que pueden contener la basura después de que los terminadores nulos.
Usted puede tener la brevedad que no es significativamente más propenso a errores: 'retorno (a <|| rhs.a (a == rhs.a && (b <|| rhs.b (b == c && rhs.b