Namensräume
Varianten
Aktionen

std::weak_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
weak_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 weak_ordering;
(seit C++20)

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

  • alle sechs relationalen Operatoren (==, !=, <, <=, >, >=) zulässt.
  • Keine Substituierbarkeit impliziert: Wenn a äquivalent zu b ist, muss f(a) nicht unbedingt ä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.
  • Ermöglicht keine unvergleichbaren Werte: Genau eines der folgenden muss true sein: a < b, a == b oder a > b.

Inhalt

[bearbeiten] Konstanten

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

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

[bearbeiten] Konvertierungen

std::weak_ordering ist implizit in std::partial_ordering konvertierbar, während std::strong_ordering implizit in weak_ordering konvertierbar ist.

operator partial_ordering
implizite Konvertierung zu std::partial_ordering
(öffentliche Memberfunktion)

std::weak_ordering::operator partial_ordering

constexpr operator partial_ordering() const noexcept;

Rückgabewert

std::partial_ordering::less wenn v less ist, std::partial_ordering::greater wenn v greater ist, std::partial_ordering::equivalent wenn v equivalent ist.

[bearbeiten] 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 für gewöhnliche unqualifizierte oder qualifizierte Suche nicht sichtbar und können nur durch argumentabhängige Suche gefunden werden, wenn std::weak_ordering eine zugeordnete Klasse der Argumente ist.

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

operator==operator<operator>operator<=operator>=operator<=>
vergleicht mit Null oder einer weak_ordering
(Funktion)

operator==

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

Parameter

v, w - std::weak_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 oder greater ist
2) true wenn beide Parameter denselben Wert halten, false andernfalls

operator<

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

Parameter

v - ein std::weak_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 oder equivalent ist
2) true wenn v greater ist, und false wenn v less oder equivalent ist

operator<=

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

Parameter

v - ein std::weak_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 ist
2) true wenn v greater oder equivalent ist, und false wenn v less ist

operator>

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

Parameter

v - ein std::weak_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 oder equivalent ist
2) true wenn v less ist, und false wenn v greater oder equivalent ist

operator>=

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

Parameter

v - ein std::weak_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 ist
2) true wenn v less oder equivalent ist, und false wenn v greater ist

operator<=>

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

Parameter

v - ein std::weak_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.

[bearbeiten] Beispiel

[bearbeiten] 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, nicht substituierbar ist und unvergleichbare Werte zulässt
(Klasse) [edit]