operator==,!=,<,<=,>,>=<=>(std::pair)
| Definiert in der Header-Datei <utility> |
||
| (1) | ||
| (bis C++14) | ||
| (seit C++14) | ||
| (2) | ||
| (bis C++14) | ||
| (seit C++14) (bis C++20) |
||
| (3) | ||
| (bis C++14) | ||
| (seit C++14) (bis C++20) |
||
| (4) | ||
| (bis C++14) | ||
| (seit C++14) (bis C++20) |
||
| (5) | ||
| (bis C++14) | ||
| (seit C++14) (bis C++20) |
||
| (6) | ||
| (bis C++14) | ||
| (seit C++14) (bis C++20) |
||
| template< class T1, class T2, class U1, class U2 > constexpr std::common_comparison_category_t<synth-three-way-result<T1, U1>, |
(7) | (seit C++20) |
|
Das Verhalten ist undefiniert, wenn Typ und Wertkategorie von entweder lhs.first == rhs.first oder lhs.second == rhs.second nicht die BooleanTestable-Anforderungen erfüllen. |
(bis C++26) |
|
Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn sowohl decltype(lhs.first == rhs.first) als auch decltype(lhs.second == rhs.second) |
(seit C++26) |
synth-three-way.|
Die Operatoren |
(seit C++20) |
Inhalt |
[bearbeiten] Parameter
| lhs, rhs | - | zu vergleichende Paare |
[bearbeiten] Rückgabewert
[bearbeiten] Hinweise
|
Die relationalen Operatoren sind über die operator< jedes Elements definiert. |
(bis C++20) |
|
Die relationalen Operatoren sind in Bezug auf synth-three-way definiert, der, wenn möglich, `operator<=>` und andernfalls `operator<` verwendet. Insbesondere, wenn ein Elementtyp nicht selbst operator<=> bereitstellt, aber implizit in einen dreistufig vergleichbaren Typ konvertiert werden kann, wird diese Konvertierung anstelle von operator< verwendet. |
(seit C++20) |
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_constrained_equality |
202403L |
(C++26) | Beschränkter operator== für std::pair |
[bearbeiten] Beispiel
Da operator< für Paare definiert ist, können Container von Paaren sortiert werden.
#include <algorithm> #include <iomanip> #include <iostream> #include <string> #include <utility> #include <vector> int main() { std::vector<std::pair<int, std::string>> v = {{2, "baz"}, {2, "bar"}, {1, "foo"}}; std::sort(v.begin(), v.end()); for (auto p : v) std::cout << '{' << p.first << ", " << std::quoted(p.second) << "}\n"; }
Ausgabe
{1, "foo"}
{2, "bar"}
{2, "baz"}[bearbeiten] Berichte über Fehler
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 296 | C++98 | die Beschreibungen von Operatoren außer == und < fehlten |
hinzugefügt |
| LWG 2114 (P2167R3) |
C++98 | Typvoraussetzungen für boolesche Operationen fehlten | hinzugefügt |
| LWG 3865 | C++98 | Vergleichsoperatoren akzeptierten nur `pair`s desselben Typs | akzeptieren `pair`s unterschiedlicher Typen |
[bearbeiten] Siehe auch
| (entfernt in C++20)(entfernt in C++20)(entfernt in C++20)(entfernt in C++20)(entfernt in C++20)(C++20) |
vergleicht die Werte im Tupel lexikographisch (function template) |