Auf den ersten Blick mag dies zu abstrakt oder philosophisch erscheinen, aber ich bin wirklich daran interessiert zu sehen, ob jemand ein überzeugendes Argument für die eine oder die andere Implementierung hat.
Gegeben operator<
para std::pair<T1, T2>
was die bessere Umsetzung wäre:
return x.first < y.first ||
x.first == y.first && x.second < y.second;
oder:
return x.first < y.first ||
!(y.first < x.first) && x.second < y.second;
Meines Erachtens liefern die beiden Implementierungen gleichwertige Ergebnisse. Ist die letztere vorzuziehen, weil sie ausschließlich in Form von operator<
? Oder ist es legitim, davon auszugehen, dass ein Typ, der weniger als vergleichbar ist, auch gleich vergleichbar sein sollte? Sieht noch jemand einen anderen Punkt, der Sie zu der einen oder anderen Entscheidung veranlasst?
Natürlich sollte jede Antwort sowohl generisch als auch erweiterbar sein. Welche Lösung würden Sie also verwenden und warum? Gibt es eine andere Implementierung, die noch besser ist als die oben genannte?