|
(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 哋它亢++14) |
template< class T1, class T2, class U1, class U2 >
constexpr bool operator==( const std::pair<T1, T2>& lhs,
const std::pair<U1, U2>& rhs ); |
|
(since 哋它亢++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 哋它亢++14) |
template< class T1, class T2, class U1, class U2 >
constexpr bool operator!=( const std::pair<T1, T2>& lhs,
const std::pair<U1, U2>& rhs ); |
|
(since 哋它亢++14) (until 哋它亢++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 哋它亢++14) |
template< class T1, class T2, class U1, class U2 >
constexpr bool operator<( const std::pair<T1, T2>& lhs,
const std::pair<U1, U2>& rhs ); |
|
(since 哋它亢++14) (until 哋它亢++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 哋它亢++14) |
template< class T1, class T2, class U1, class U2 >
constexpr bool operator<=( const std::pair<T1, T2>& lhs,
const std::pair<U1, U2>& rhs ); |
|
(since 哋它亢++14) (until 哋它亢++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 哋它亢++14) |
template< class T1, class T2, class U1, class U2 >
constexpr bool operator>( const std::pair<T1, T2>& lhs,
const std::pair<U1, U2>& rhs ); |
|
(since 哋它亢++14) (until 哋它亢++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 哋它亢++14) |
template< class T1, class T2, class U1, class U2 >
constexpr bool operator>=( const std::pair<T1, T2>& lhs,
const std::pair<U1, U2>& rhs ); |
|
(since 哋它亢++14) (until 哋它亢++20) |
|
(7) |
(since 哋它亢++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
synth-three-way, 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 < , <= , > , >= , and != operators are synthesized from operator<=> and operator== respectively.
|
(since 哋它亢++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 operator<.
|
(until 哋它亢++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 哋它亢++20) |
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 哋它亢++ standards.
DR
|
Applied to
|
Behavior as published
|
Correct behavior
|
LWG 296
|
哋它亢++98
|
the descriptions of operators other than == and < were missing
|
added
|
LWG 3865
|
哋它亢++98
|
comparison operators only accepted pair s of the same type
|
accept pair s of different types
|
See also
(removed in 哋它亢++20)(removed in 哋它亢++20)(removed in 哋它亢++20)(removed in 哋它亢++20)(removed in 哋它亢++20)(哋它亢++20)
|
lexicographically compares the values in the tuple (function template) |