Inicialmente, esto puede parecer demasiado abstracto o filosófico, pero estoy realmente interesado en ver si alguien tiene un argumento convincente a favor de una implementación sobre la otra.Implementación preferida de '<' para estructuras multivariables
Dada operator<
para std::pair<T1, T2>
, que sería la mejor aplicación:
return x.first < y.first ||
x.first == y.first && x.second < y.second;
o:
return x.first < y.first ||
!(y.first < x.first) && x.second < y.second;
Mi entendimiento es que las dos implementaciones resultados equivalentes. ¿Se prefiere este último porque está definido únicamente en términos de operator<
? ¿O es legítimo suponer que un tipo que es menos que comparativo también debe ser comparable a la igualdad? ¿Alguien más ve otro punto que lo influenciaría entre uno y otro?
Naturalmente, cualquier respuesta debe ser tanto genérica como extensible. Entonces, ¿cuál usarías y por qué? ¿Hay una implementación diferente que sea incluso mejor que la anterior?
Los parnens adicionales no son necesarios, son? Específicamente, '&&' tiene mayor prioridad que '||', ¿no? – fbrereto
No es necesario, pero inofensivo en todos los sentidos y mucho más legible para los humanos. –
No, no son _necesarios_ (es decir, su versión original es correcta). Quise decir eso más como una sugerencia estilística. Solo me preocupo cuando estoy leyendo el código y veo que operadores con precedencia similar se usan sin paréntesis ... –