operator==,!=,<,<=,>,>=,<=>(std::pair)
From cppreference.com
| Defined in header <utility>
|
||
| (1) | ||
| (until C++14) | ||
| (since C++14) | ||
| (2) | ||
| (until C++14) | ||
| (since C++14) (until C++20) |
||
| (3) | ||
| (until C++14) | ||
| (since C++14) (until C++20) |
||
| (4) | ||
| (until C++14) | ||
| (since C++14) (until C++20) |
||
| (5) | ||
| (until C++14) | ||
| (since C++14) (until C++20) |
||
| (6) | ||
| (until C++14) | ||
| (since C++14) (until C++20) |
||
| (7) | (since C++20) | |
1-2) Tests if both elements of lhs and rhs are equal, that is, compares lhs.first with rhs.first and lhs.second with rhs.second.
3-6) Compares lhs and rhs lexicographically by
operator<, that is, compares the first elements and only if they are equivalent, compares the second elements.7) Compares lhs and rhs lexicographically by synthesized three-way comparison (see below), that is, compares the first elements and only if they are equivalent, compares the second elements.
The return type is the common comparison category type of the result type of synthesized three-way comparison of
The return type is the common comparison category type of the result type of synthesized three-way comparison of
T1 and U1 and the one of T2 and U2.|
The |
(since C++20) |
Synthesized three-way comparisonGiven two object types
t < u ? std::weak_ordering::less : u < t ? std::weak_ordering::greater : std::weak_ordering::equivalent
The behavior of operator<=> is undefined if |
(since C++20) |
[edit] Parameters
| lhs, rhs | - | pairs to compare |
[edit] Return value
1) true if both lhs.first == rhs.first and lhs.second == rhs.second, otherwise false
2) !(lhs == rhs)
3) If lhs.first < rhs.first, returns true. Otherwise, if rhs.first < lhs.first, returns false. Otherwise, if lhs.second < rhs.second, returns true. Otherwise, returns false.
4) !(rhs < lhs)
5) rhs < lhs
6) !(lhs < rhs)
7) synth_three_way(lhs.first, rhs.first) if it is not equal to 0, otherwise synth_three_way(lhs.second, rhs.second), where
synth_three_way is an exposition-only function object performing synthesized three-way comparison.[edit] Example
Because operator< is defined for pairs, containers of pairs can be sorted.
Run this code
#include <iostream> #include <iomanip> #include <utility> #include <vector> #include <algorithm> #include <string> 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"; }
Output:
{1, "foo"}
{2, "bar"}
{2, "baz"}[edit] Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 296 | C++98 | the descriptions of operators other than == and < were missing
|
added |
| LWG 3865 | C++98 | comparison operators only accepted pairs of the same type
|
accept pairs of different types
|
[edit] See also
| (removed in C++20)(removed in C++20)(removed in C++20)(removed in C++20)(removed in C++20)(C++20) |
lexicographically compares the values in the tuple (function template) |