Técnicamente sí, los está ordenando directamente por el miembro a
, lo que debería estar bien para, por ejemplo. std::set
. Básicamente se comportan como enteros, es decir. si es < by < c entonces < c, etc. No creo que el operador == afecte la validez del pedido implícito en el operador <.
Sin embargo, es una mala idea definir dos operadores en la misma clase que implican cosas diferentes al respecto, ya que es probable que resulte confuso para los usuarios de esa clase. Por lo que yo sé, no rompería directamente ningún contenedor STL ya que usan solo uno de los dos operadores, pero ciertamente me confundiría que tu puedes tener este caso donde! (Barra < baz) y! (Barra < baz) pero! (bar == baz).
En un caso como este, preferiría proporcionar como miembro solo el operador que es más natural para la clase, y hacer que el otro esté disponible a través de una estructura independiente que se puede suministrar como un parámetro de plantilla al contenedor STL. Para mí, eso deja en claro que es una forma de ordenar instancias de la clase que no es necesariamente equivalente a los otros operadores miembros.
Creo que tendría un orden estricto débil con respecto a 'a' sólo por el' operador <', ¿no? No pensé que 'operator ==' tuviera algo que ver con eso. –
El problema sería sobre semántica. Si '! (A Flame
¿Por qué no escribes un programa que contiene un vector de 'Foo's, lo clasificas y ves en qué orden sale :) –