Namensräume
Varianten
Aktionen

std::partial_ordering

Von cppreference.com
< cpp‎ | utility
 
 
Dienstprogramm-Bibliotheken
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Coroutine-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Drei-Wege-Vergleich
partial_ordering
(C++20)
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

Allgemeine Hilfsmittel
Relationale Operatoren (in C++20 veraltet)
 
Definiert in der Header-Datei <compare>
class partial_ordering;
(seit C++20)

Der Klassentyp std::partial_ordering ist der Ergebnistyp eines Dreifachvergleichs, der

  • alle sechs relationalen Operatoren (==, !=, <, <=, >, >=) zulässt.
  • Keine Substituierbarkeit impliziert: Wenn a äquivalent zu b ist, muss f(a) nicht notwendigerweise äquivalent zu f(b) sein, wobei f eine Funktion bezeichnet, die nur vergleichsrelevante Zustände liest, die über die öffentlichen const-Member des Arguments zugänglich sind. Anders ausgedrückt: Äquivalente Werte können unterscheidbar sein.
  • Ungenordnete Werte zulässt: a < b, a == b und a > b können alle false sein.

Inhalt

[edit] Konstanten

Der Typ std::partial_ordering hat vier gültige Werte, die als const static Datenmember seines Typs implementiert sind

Name Definition
inline constexpr std::partial_ordering less
[static]
ein gültiger Wert, der eine Kleiner-als-Beziehung (geordnet davor) angibt
(öffentliche statische Member-Konstante)
inline constexpr std::partial_ordering equivalent
[static]
ein gültiger Wert, der Äquivalenz anzeigt (weder geordnet davor noch geordnet danach)
(öffentliche statische Member-Konstante)
inline constexpr std::partial_ordering greater
[static]
ein gültiger Wert, der eine Größer-als-Beziehung (geordnet danach) angibt
(öffentliche statische Member-Konstante)
inline constexpr std::partial_ordering unordered
[static]
ein gültiger Wert, der eine Beziehung zu einem ungenordeten Wert anzeigt
(öffentliche statische Member-Konstante)

[edit] Konvertierungen

std::partial_ordering kann nicht implizit in andere Vergleichskategorietypen konvertiert werden, während sowohl std::strong_ordering als auch std::weak_ordering implizit in partial_ordering konvertierbar sind.

[edit] Vergleiche

Vergleichsoperatoren sind zwischen Werten dieses Typs und dem Literal 0 definiert. Dies unterstützt die Ausdrücke a <=> b == 0 oder a <=> b < 0, die verwendet werden können, um das Ergebnis eines Drei-Wege-Vergleichsoperators in eine boolesche Beziehung umzuwandeln; siehe std::is_eq, std::is_lt usw.

Diese Funktionen sind nicht für normale nicht-qualifizierte oder qualifizierte Suche sichtbar und können nur durch Argument-abhängige Suche gefunden werden, wenn std::partial_ordering eine zu den Argumenten assoziierte Klasse ist.

Das Verhalten eines Programms, das versucht, ein partial_ordering mit etwas anderem als dem Ganzzahl-Literal 0 zu vergleichen, ist undefiniert.

operator==operator<operator>operator<=operator>=operator<=>
vergleicht mit Null oder einem partial_ordering
(Funktion)

operator==

friend constexpr bool operator==( partial_ordering v, /*unspecified*/ u ) noexcept;
(1)
friend constexpr bool
    operator==( partial_ordering v, partial_ordering w ) noexcept = default;
(2)

Parameter

v, w - std::partial_ordering Werte zum Prüfen
u - ein unbenutzter Parameter beliebigen Typs, der ein Literal-Null-Argument akzeptiert

Rückgabewert

1) true wenn v equivalent ist, false wenn v less, greater oder unordered ist
2) true wenn beide Parameter denselben Wert halten, false andernfalls

operator<

friend constexpr bool operator<( partial_ordering v, /*unspecified*/ u ) noexcept;
(1)
friend constexpr bool operator<( /*unspecified*/ u, partial_ordering v ) noexcept;
(2)

Parameter

v - ein std::partial_ordering Wert zum Prüfen
u - ein unbenutzter Parameter beliebigen Typs, der ein Literal-Null-Argument akzeptiert

Rückgabewert

1) true wenn v less ist, und false wenn v greater, equivalent oder unordered ist
2) true wenn v greater ist, und false wenn v less, equivalent oder unordered ist

operator<=

friend constexpr bool operator<=( partial_ordering v, /*unspecified*/ u ) noexcept;
(1)
friend constexpr bool operator<=( /*unspecified*/ u, partial_ordering v ) noexcept;
(2)

Parameter

v - ein std::partial_ordering Wert zum Prüfen
u - ein unbenutzter Parameter beliebigen Typs, der ein Literal-Null-Argument akzeptiert

Rückgabewert

1) true wenn v less oder equivalent ist, und false wenn v greater oder unordered ist
2) true wenn v greater oder equivalent ist, und false wenn v less oder unordered ist

operator>

friend constexpr bool operator>( partial_ordering v, /*unspecified*/ u ) noexcept;
(1)
friend constexpr bool operator>( /*unspecified*/ u, partial_ordering v ) noexcept;
(2)

Parameter

v - ein std::partial_ordering Wert zum Prüfen
u - ein unbenutzter Parameter beliebigen Typs, der ein Literal-Null-Argument akzeptiert

Rückgabewert

1) true wenn v greater ist, und false wenn v less, equivalent oder unordered ist
2) true wenn v less ist, und false wenn v greater, equivalent oder unordered ist

operator>=

friend constexpr bool operator>=( partial_ordering v, /*unspecified*/ u ) noexcept;
(1)
friend constexpr bool operator>=( /*unspecified*/ u, partial_ordering v ) noexcept;
(2)

Parameter

v - ein std::partial_ordering Wert zum Prüfen
u - ein unbenutzter Parameter beliebigen Typs, der ein Literal-Null-Argument akzeptiert

Rückgabewert

1) true wenn v greater oder equivalent ist, und false wenn v less oder unordered ist
2) true wenn v less oder equivalent ist, und false wenn v greater oder unordered ist

operator<=>

friend constexpr partial_ordering operator<=>( partial_ordering v, /*unspecified*/ u ) noexcept;
(1)
friend constexpr partial_ordering operator<=>( /*unspecified*/ u, partial_ordering v ) noexcept;
(2)

Parameter

v - ein std::partial_ordering Wert zum Prüfen
u - ein unbenutzter Parameter beliebigen Typs, der ein Literal-Null-Argument akzeptiert

Rückgabewert

1) v.
2) greater, wenn v less ist, less, wenn v greater ist, andernfalls v.

[edit] Hinweise

Der eingebaute operator<=> zwischen Gleitkommawerten verwendet diese Ordnung: das positive Null und das negative Null vergleichen sich als equivalent, können aber unterschieden werden, und NaN-Werte vergleichen sich als unordered mit jedem anderen Wert.

[edit] Beispiel

[edit] Siehe auch

der Ergebnistyp des 3-Wege-Vergleichs, der alle 6 Operatoren unterstützt und substituierbar ist
(Klasse) [edit]
der Ergebnistyp des 3-Wege-Vergleichs, der alle 6 Operatoren unterstützt und nicht substituierbar ist
(Klasse) [edit]