operator==,!=,<,<=,>,>=,<=> (std::pair)
Defined in header
<utility>
|
||
(1) | ||
template
<
class
T1,
class
T2,
class
U1,
class
U2
>
bool operator == ( const std:: pair < T1, T2 > & lhs, const std:: pair < U1, U2 > & rhs ) ; |
(until C++14) | |
template
<
class
T1,
class
T2,
class
U1,
class
U2
>
constexpr
bool
operator
==
(
const
std::
pair
<
T1, T2
>
&
lhs,
|
(since C++14) | |
(2) | ||
template
<
class
T1,
class
T2,
class
U1,
class
U2
>
bool operator ! = ( const std:: pair < T1, T2 > & lhs, const std:: pair < U1, U2 > & rhs ) ; |
(until C++14) | |
template
<
class
T1,
class
T2,
class
U1,
class
U2
>
constexpr
bool
operator
!
=
(
const
std::
pair
<
T1, T2
>
&
lhs,
|
(since C++14)
(until C++20) |
|
(3) | ||
template
<
class
T1,
class
T2,
class
U1,
class
U2
>
bool operator < ( const std:: pair < T1, T2 > & lhs, const std:: pair < U1, U2 > & rhs ) ; |
(until C++14) | |
template
<
class
T1,
class
T2,
class
U1,
class
U2
>
constexpr
bool
operator
<
(
const
std::
pair
<
T1, T2
>
&
lhs,
|
(since C++14)
(until C++20) |
|
(4) | ||
template
<
class
T1,
class
T2,
class
U1,
class
U2
>
bool operator <= ( const std:: pair < T1, T2 > & lhs, const std:: pair < U1, U2 > & rhs ) ; |
(until C++14) | |
template
<
class
T1,
class
T2,
class
U1,
class
U2
>
constexpr
bool
operator
<=
(
const
std::
pair
<
T1, T2
>
&
lhs,
|
(since C++14)
(until C++20) |
|
(5) | ||
template
<
class
T1,
class
T2,
class
U1,
class
U2
>
bool operator > ( const std:: pair < T1, T2 > & lhs, const std:: pair < U1, U2 > & rhs ) ; |
(until C++14) | |
template
<
class
T1,
class
T2,
class
U1,
class
U2
>
constexpr
bool
operator
>
(
const
std::
pair
<
T1, T2
>
&
lhs,
|
(since C++14)
(until C++20) |
|
(6) | ||
template
<
class
T1,
class
T2,
class
U1,
class
U2
>
bool operator >= ( const std:: pair < T1, T2 > & lhs, const std:: pair < U1, U2 > & rhs ) ; |
(until C++14) | |
template
<
class
T1,
class
T2,
class
U1,
class
U2
>
constexpr
bool
operator
>=
(
const
std::
pair
<
T1, T2
>
&
lhs,
|
(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
pair
s of the same type
|
accept
pair
s 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) |