operator==,!=,<,<=,>,>=,<=>(std::pair) - cppreference.com
| Defined in header |
||
| (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.
|
The behavior is undefined if the type and value category of either |
(until C++26) |
|
This overload participates in overload resolution only if both |
(since C++26) |
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. The behavior is undefined if the type and value category of any of lhs.first < rhs.first, rhs.first < lhs.first, or lhs.second < rhs.second do not meet the BooleanTestable requirements.
7) Compares lhs and rhs lexicographically by
, that is, compares the first elements and only if they are equivalent, compares the second elements.
synth-three-way-result is the return type of synth-three-way.
|
The |
(since C++20) |
Parameters
| lhs, rhs | - | pairs to compare |
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)
Notes
|
The relational operators are defined in terms of each element's |
(until C++20) |
|
The relational operators are defined in terms of synth-three-way, which uses Notably, if an element type does not itself provide |
(since C++20) |
| Feature-test macro | Value | Std | Feature |
|---|---|---|---|
__cpp_lib_constrained_equality |
202403L |
(C++26) | Constrained operator== for std::pair
|
Example
Because operator< is defined for pairs, containers of pairs can be sorted.
#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"; }
Output:
{1, "foo"}
{2, "bar"}
{2, "baz"}
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 2114 (P2167R3) |
C++98 | type preconditions for boolean operations were missing | added |
| LWG 3865 | C++98 | comparison operators only accepted pairs of the same type
|
accept pairs of different types
|