So definieren Sie den Operator< auf einem n-Tupel für Strict Weak Ordering
Einführung
Strict Weak Ordering ist ein mathematisches Konzept, das eine Beziehung zwischen zwei Objekten definiert. Es gibt an, dass sowohl f(x, y) als auch f(y, x) falsch sind, wenn die Objekte x und y äquivalent sind; und wenn a kleiner als b ist, dann ist f(a, b) wahr und f(b, a) falsch.
Definition für n-Tupel
Für ein n-Tupel ist der Operator< kann so definiert werden, dass sie eine strikte schwache Ordnung erfüllt, indem die folgenden Bedingungen befolgt werden:
Implementierung
Die obige Definition kann in C mit den folgenden Schritten implementiert werden:
Beispiel
Für ein 3-Tupel ist der Operator< kann wie folgt definiert werden:
struct Triple { int x; int y; int z; bool operator<(const Triple& other) const { return (x < other.x) || (y < other.y) || (z < other.z); } };
Nach dieser Definition wären zwei Tripel äquivalent, wenn sie identische Werte für x, y und z hätten. Ein Tripel würde als kleiner als ein anderes betrachtet, wenn eine seiner Komponenten kleiner als die des anderen Tripels ist.
std::tuple
Alternativ kann std:: Die von der C-Standardbibliothek bereitgestellte Tupelklasse implementiert bereits eine strikte schwache Reihenfolge für Tupel. Um dies zu nutzen, können Tupel verwendet werden, ohne die darin enthaltenen Objekte zu kopieren.
struct S { int a; int b; }; bool operator<(const S& lhs, const S& rhs) { return std::tie(lhs.a, lhs.b) < std::tie(rhs.a, rhs.b); }
Das obige ist der detaillierte Inhalt vonSo implementieren Sie eine strikte schwache Reihenfolge. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!