Namespaces
Variants

std:: partial_ordering

From cppreference.net
Utilities library
Definiert im Header <compare>
class partial_ordering ;
(seit C++20)

Der Klassentyp std::partial_ordering ist der Ergebnistyp eines Drei-Wege-Vergleichs , der:

  • Akzeptiert alle sechs relationalen Operatoren ( == , != , < , <= , > , >= ).
  • Impliziert keine Substituierbarkeit: Wenn a äquivalent zu b ist, kann f ( a ) nicht ä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. Mit anderen Worten können äquivalente Werte unterscheidbar sein.
  • Lässt unvergleichbare Werte zu : a < b , a == b und a > b können alle false sein.

Inhaltsverzeichnis

Konstanten

Der Typ std::partial_ordering hat vier gültige Werte, implementiert als konstante statische Datenelemente seines Typs:

Name Definition
inline constexpr std :: partial_ordering less
[static]
ein gültiger Wert, der eine Kleiner-als-Beziehung (geordnet vor) anzeigt
(öffentliche statische Elementkonstante)
inline constexpr std :: partial_ordering equivalent
[static]
ein gültiger Wert, der Äquivalenz anzeigt (weder geordnet vor noch geordnet nach)
(öffentliche statische Elementkonstante)
inline constexpr std :: partial_ordering greater
[static]
ein gültiger Wert, der eine Größer-als-Beziehung (geordnet nach) anzeigt
(öffentliche statische Elementkonstante)
inline constexpr std :: partial_ordering unordered
[static]
ein gültiger Wert, der eine Beziehung mit einem unvergleichbaren Wert anzeigt
(öffentliche statische Elementkonstante)

Konvertierungen

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

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 Relation umzuwandeln; siehe std::is_eq , std::is_lt , etc.

Diese Funktionen sind für gewöhnliches unqualified oder qualified lookup nicht sichtbar und können nur durch argument-dependent lookup gefunden werden, wenn std::partial_ordering eine assoziierte Klasse der Argumente ist.

Das Verhalten eines Programms, das versucht, einen partial_ordering mit etwas anderem als dem ganzzahligen 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 zur Überprüfung
u - ein unbenutzter Parameter beliebigen Typs, der das Literal Null akzeptiert

Rückgabewert

1) true wenn v equivalent ist, false wenn v less , greater , oder unordered ist
2) true wenn beide Parameter denselben Wert enthalten, 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 zur Überprüfung
u - ein unbenutzter Parameter beliebigen Typs, der das Literal Null 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 zur Überprüfung
u - ein unbenutzter Parameter beliebigen Typs, der das Literal Null 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 zur Überprüfung
u - ein ungenutzter Parameter beliebigen Typs, der das Literal Null 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 zur Überprüfung
u - ein unbenutzter Parameter beliebigen Typs, der das Literal Null 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 zur Überprüfung
u - ein unbenutzter Parameter beliebigen Typs, der das Literal Null akzeptiert

Rückgabewert

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

Hinweise

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

Beispiel

Siehe auch

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