operator==,!=,<,<=,>,>=,<=>(std::tuple)
在标头 <tuple> 定义
|
||
(1) | ||
template< class... TTypes, class... UTypes > bool operator==( const std::tuple<TTypes...>& lhs, |
(C++11 起) (C++14 前) |
|
template< class... TTypes, class... UTypes > constexpr bool operator==( const std::tuple<TTypes...>& lhs, |
(C++14 起) | |
(2) | ||
template< class... TTypes, class... UTypes > bool operator!=( const std::tuple<TTypes...>& lhs, |
(C++11 起) (C++14 前) |
|
template< class... TTypes, class... UTypes > constexpr bool operator!=( const std::tuple<TTypes...>& lhs, |
(C++14 起) (C++20 前) |
|
(3) | ||
template< class... TTypes, class... UTypes > bool operator<( const std::tuple<TTypes...>& lhs, |
(C++11 起) (C++14 前) |
|
template< class... TTypes, class... UTypes > constexpr bool operator<( const std::tuple<TTypes...>& lhs, |
(C++14 起) (C++20 前) |
|
(4) | ||
template< class... TTypes, class... UTypes > bool operator<=( const std::tuple<TTypes...>& lhs, |
(C++11 起) (C++14 前) |
|
template< class... TTypes, class... UTypes > constexpr bool operator<=( const std::tuple<TTypes...>& lhs, |
(C++14 起) (C++20 前) |
|
(5) | ||
template< class... TTypes, class... UTypes > bool operator>( const std::tuple<TTypes...>& lhs, |
(C++11 起) (C++14 前) |
|
template< class... TTypes, class... UTypes > constexpr bool operator>( const std::tuple<TTypes...>& lhs, |
(C++14 起) (C++20 前) |
|
(6) | ||
template< class... TTypes, class... UTypes > bool operator>=( const std::tuple<TTypes...>& lhs, |
(C++11 起) (C++14 前) |
|
template< class... TTypes, class... UTypes > constexpr bool operator>=( const std::tuple<TTypes...>& lhs, |
(C++14 起) (C++20 前) |
|
template< class... TTypes, class... UTypes > constexpr std::common_comparison_category_t< |
(7) | (C++20 起) |
template< class... TTypes, tuple-like UTuple > constexpr bool operator==( const tuple<TTypes...>& lhs, const UTuple& rhs ); |
(8) | (C++23 起) |
template< class... TTypes, tuple-like UTuple > constexpr std::common_comparison_category_t< |
(9) | (C++23 起) |
[
0,
sizeof...(Types))
中存在 i 使得 std::get<i>(lhs) == std::get<i>(rhs) 不是返回类型可转换到 bool 的 (C++23 前)合法的表达式,那么程序非良构。
如果 |
(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;
...
- 对于空 tuple,返回 std::strong_ordering::equal。
- 对于非空 tuple,等价于
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
对象。/* Elems */ 表示包含 [
0,
std::tuple_size_v<UTuple>)
中以升序排列的每个 i 对应的类型 std::tuple_element_t<i, UTuple> 的类型包。此重载只能通过实参依赖查找找到。所有比较运算符是短路的;它们在确定结果所必须的比较之外不会访问其他的 tuple 元素。
|
(C++20 起) |
参数
lhs, rhs | - | 要比较的 tuple |
返回值
[
0,
sizeof...(Types))
中的 i 都满足 std::get<i>(lhs) == std::get<i>(rhs) 时返回 true,否则返回 false。对两个空 tuple 返回 true。示例
因为 operator< 有对 tuple 定义,所以能排序 tuple 的容器。
#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"; }
输出:
{ 1, foo, 10.1 } { 2, bar, 3.14 } { 2, baz, -1.1 } { 2, baz, -0.1 }
参阅
(C++20 中移除)(C++20 中移除)(C++20 中移除)(C++20 中移除)(C++20 中移除)(C++20) |
按字典序比较 pair 中的值 (函数模板) |