operator==,!=,<,<=,>,>=,<=>(std::tuple)
Defined in header <tuple>
|
||
(1) | ||
template< class... TTypes, class... UTypes > bool operator==( const std::tuple<TTypes...>& lhs, |
(since C++11) (until C++14) |
|
template< class... TTypes, class... UTypes > constexpr bool operator==( const std::tuple<TTypes...>& lhs, |
(since C++14) | |
(2) | ||
template< class... TTypes, class... UTypes > bool operator!=( const std::tuple<TTypes...>& lhs, |
(since C++11) (until C++14) |
|
template< class... TTypes, class... UTypes > constexpr bool operator!=( const std::tuple<TTypes...>& lhs, |
(since C++14) (until C++20) |
|
(3) | ||
template< class... TTypes, class... UTypes > bool operator<( const std::tuple<TTypes...>& lhs, |
(since C++11) (until C++14) |
|
template< class... TTypes, class... UTypes > constexpr bool operator<( const std::tuple<TTypes...>& lhs, |
(since C++14) (until C++20) |
|
(4) | ||
template< class... TTypes, class... UTypes > bool operator<=( const std::tuple<TTypes...>& lhs, |
(since C++11) (until C++14) |
|
template< class... TTypes, class... UTypes > constexpr bool operator<=( const std::tuple<TTypes...>& lhs, |
(since C++14) (until C++20) |
|
(5) | ||
template< class... TTypes, class... UTypes > bool operator>( const std::tuple<TTypes...>& lhs, |
(since C++11) (until C++14) |
|
template< class... TTypes, class... UTypes > constexpr bool operator>( const std::tuple<TTypes...>& lhs, |
(since C++14) (until C++20) |
|
(6) | ||
template< class... TTypes, class... UTypes > bool operator>=( const std::tuple<TTypes...>& lhs, |
(since C++11) (until C++14) |
|
template< class... TTypes, class... UTypes > constexpr bool operator>=( const std::tuple<TTypes...>& lhs, |
(since C++14) (until C++20) |
|
template< class... TTypes, class... UTypes > constexpr std::common_comparison_category_t< |
(7) | (since C++20) |
template< class... TTypes, tuple-like UTuple > constexpr bool operator==( const tuple<TTypes...>& lhs, const UTuple& rhs ); |
(8) | (since C++23) |
template< class... TTypes, tuple-like UTuple > constexpr std::common_comparison_category_t< |
(9) | (since C++23) |
[
0,
sizeof...(Types))
, the program is ill-formed.
If decltype(std::get<i>(lhs) == std::get<i>(rhs)) does not model boolean-testable for any i in |
(since C++23) |
if (std::get<0>(lhs) < std::get<0>(rhs)) return true;
if (std::get<0>(rhs) < std::get<0>(lhs)) return false;
if (std::get<1>(lhs) < std::get<1>(rhs)) return true;
if (std::get<1>(rhs) < std::get<1>(lhs)) return false;
...
[
0,
sizeof...(Types))
, the program is ill-formed.- For empty tuples, returns std::strong_ordering::equal.
- For non-empty tuples, the effect is equivalent to
if (auto c =
synth-three-way(std::get<0>(lhs), std::get<0>(rhs)); c != 0) return c;
if (auto c =
synth-three-way(std::get<1>(lhs), std::get<1>(rhs)); c != 0) return c;
...
return
synth-three-way(std::get<N - 1>(lhs), std::get<N - 1>(rhs));
tuple-like
object, and the number of elements of rhs is determined by std::tuple_size_v<UTuple> instead. This overload can only be found via argument-dependent lookup. tuple-like
object. /* Elems */ denotes the pack of types std::tuple_element_t<i, UTuple> for each i in [
0,
std::tuple_size_v<UTuple>)
in increasing order. This overload can only be found via argument-dependent lookup.All comparison operators are short-circuited; they do not access tuple elements beyond what is necessary to determine the result of the comparison.
The |
(since C++20) |
Parameters
lhs, rhs | - | tuples to compare |
Return value
[
0,
sizeof...(Types))
, otherwise false. For two empty tuples returns true.Example
Because operator< is defined for tuples, containers of tuples can be sorted.
#include <algorithm> #include <iostream> #include <tuple> #include <vector> int main() { std::vector<std::tuple<int, std::string, float>> v { {2, "baz", -0.1}, {2, "bar", 3.14}, {1, "foo", 10.1}, {2, "baz", -1.1}, }; std::sort(v.begin(), v.end()); for (const auto& p: v) std::cout << "{ " << std::get<0>(p) << ", " << std::get<1>(p) << ", " << std::get<2>(p) << " }\n"; }
Output:
{ 1, foo, 10.1 } { 2, bar, 3.14 } { 2, baz, -1.1 } { 2, baz, -0.1 }
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 pair (function template) |