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
The return type is the common comparison category type of the result type of synthesized three-way comparison on
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 on
T1
and the one of T2
.
The |
(since C++20) |
Synthesized three-way comparisonGiven an object type
lhs < rhs ? std::weak_ordering::less : rhs < lhs ? std::weak_ordering::greater : std::weak_ordering::equivalent
The behavior of operator<=> is undefined if |
(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 false2)
!(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.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"}
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) |