N
camper schrieb:
Nexus schrieb:
Es besteht kein Strict Weak Ordering.
Kann ich nicht erkennen.
Nicht? Laut Wikipedia muss negative Transitivität für < gelten.
Gegenbeispiel:
Vector3 a(1,2,3);
Vector3 b(2,2,4);
Vector3 c(4,4,4);
a < b; // false
b < c; // false
a < c; // true, müsste aber false sein
camper schrieb:
Zirkelschluss. Äquivalenz wird in diesem Zusammenhang ja gerade erst durch das Sortierkriterium induziert. Die Vektoren sind eben nicht unterschiedlich in diesem Sinne.
Nein, kein Zirkelschluss. Ich bezog "unterschiedlich" auf Gleichheit, nicht Äquivalenz – Gleichheit im Sinne von operator== , welche auch dem natürlichen Verständnis von Vektorgleichheit entspricht. Ich weiss schon, was du meinst, aber so eine Implementierung macht die Vektorklasse für assoziative Container nicht nur nutzlos, sondern gefährlich. Mehr dazu im unteren Abschnitt.
camper schrieb:
Ob das konkrete Kriterium besonders sinnvoll ist, kann dahingestellt bleiben. Jedenfalls würde ich nicht von vornherein ausschließen, dass es Anwendungen für diese Form gibt.
Meinst du? Ich kann es mir schwer vorstellen. Als Anwender erlebt man wahrscheinlich in den meisten Fällen ein blaues Wunder. Ich kann nicht für alle sprechen, aber gerade gestern habe ich relativ lange an einem Fehler gesucht, der von einem falschen Sortierkriterium in meinem Code ausgegangen ist. Wenn man dann hingegen eine fertige Bibliothek anwendet, vertraut man dieser meist ein Stück und sucht den Fehler noch viel eher bei sich. Sowas ist extrem mühsam, das kommt schon fast einem Bug nahe. Und ipsecs Feststellung macht die Situation nicht besser.
Gerade bei Operatoren sollten Entwickler meiner Meinung nach überaus vorsichtig sein. Wenn etwas nicht eindeutig ist, sollte man eher auf benannte Funktionen ausweichen. Es wäre ja kein Problem gewesen, eventuelle Anwendungsfälle mit einer Funktion ElementwiseLess() oder ähnlich zu berücksichtigen, um alle glücklich zu machen (auch wenn ich sowas nie in eine Vektorklasse packen würde).