operator==,!=,<,<=,>,>=,<=>(std::pair)
|   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)  | 
||
|   template< class T1, class T2, class U1, class U2 > constexpr std::common_comparison_category_t<synth-three-way-result<T1, U1>,  | 
(7) | (since C++20) | 
| 
 The behavior is undefined if the type and value category of either lhs.first == rhs.first or lhs.second == rhs.second do not meet the BooleanTestable requirements.  | 
(until C++26) | 
| 
 This overload participates in overload resolution only if both decltype(lhs.first == rhs.first) and decltype(lhs.second == rhs.second) model   | 
(since C++26) | 
synth-three-way.| 
 The   | 
(since C++20) | 
Parameters
| lhs, rhs | - | pairs to compare | 
Return value
Notes
| 
 The relational operators are defined in terms of each element's operator<.  | 
(until C++20) | 
| 
 The relational operators are defined in terms of synth-three-way, which uses operator<=> if possible, or operator< otherwise. Notably, if an element type does not itself provide operator<=>, but is implicitly convertible to a three-way comparable type, that conversion will be used instead of operator<.  | 
(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
 | 
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)  |