Dies mag zunächst abstrakt oder philosophisch erscheinen, aber ich bin wirklich interessiert zu sehen, ob jemand ein überzeugendes Argument für eine Implementierung gegenüber der anderen hat.Bevorzugte Implementierung von '<' für multi-variable Strukturen
Da operator<
für 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;
Mein Verständnis ist, dass die beiden Implementierungen zu vergleichbaren Ergebnissen führen. Wird Letzteres bevorzugt, weil es ausschließlich in Bezug auf operator<
definiert ist? Oder ist es legitim anzunehmen, dass ein Typ, der weniger als vergleichbar ist, auch gleichwertig sein sollte? Sieht jemand anderes einen anderen Punkt, der Sie zwischen dem einen oder anderen hin und her schwingen lässt?
Natürlich sollte jede Antwort sowohl generisch als auch erweiterbar sein. Also welchen würdest du benutzen und warum? Gibt es eine andere Implementierung, die sogar besser ist als die oben genannten?
Das zusätzliche parnens nicht notwendig ist, sind sie? Insbesondere hat '&&' eine höhere Priorität als '||', nein? – fbrereto
Nicht notwendig, aber in jeder Hinsicht harmlos und viel besser lesbar. –
Nein, sie sind nicht _notwendig_ (d. H. Ihre ursprüngliche Version ist korrekt). Ich meinte das eher als Stilvorschlag. Ich bin nur besorgt, wenn ich Code lese und ich sehe Operatoren mit ähnlicher Priorität ohne Klammern ... –