operator==,!=,<,<=,>,>=(std::tuple)

来自cppreference.com
< cpp‎ | utility‎ | tuple
定义于头文件 <tuple>
template< class... TTypes, class... UTypes >

bool operator==( const tuple<TTypes...>& lhs,

                 const tuple<UTypes...>& rhs );
(1) (C++11 起)
(C++14 前)
template< class... TTypes, class... UTypes >

constexpr bool operator==( const tuple<TTypes...>& lhs,

                           const tuple<UTypes...>& rhs );
(1) (C++14 起)
template< class... TTypes, class... UTypes >

bool operator!=( const tuple<TTypes...>& lhs,

                 const tuple<UTypes...>& rhs );
(2) (C++11 起)
(C++14 前)
template< class... TTypes, class... UTypes >

constexpr bool operator!=( const tuple<TTypes...>& lhs,

                           const tuple<UTypes...>& rhs );
(2) (C++14 起)
template< class... TTypes, class... UTypes >

bool operator<( const tuple<TTypes...>& lhs,

                const tuple<UTypes...>& rhs );
(3) (C++11 起)
(C++14 前)
template< class... TTypes, class... UTypes >

constexpr bool operator<( const tuple<TTypes...>& lhs,

                          const tuple<UTypes...>& rhs );
(3) (C++14 起)
template< class... TTypes, class... UTypes >

bool operator<=( const tuple<TTypes...>& lhs,

                 const tuple<UTypes...>& rhs );
(4) (C++11 起)
(C++14 前)
template< class... TTypes, class... UTypes >

constexpr bool operator<=( const tuple<TTypes...>& lhs,

                           const tuple<UTypes...>& rhs );
(4) (C++14 起)
template< class... TTypes, class... UTypes >

bool operator>( const tuple<TTypes...>& lhs,

                const tuple<UTypes...>& rhs );
(5) (C++11 起)
(C++14 前)
template< class... TTypes, class... UTypes >

constexpr bool operator>( const tuple<TTypes...>& lhs,

                          const tuple<UTypes...>& rhs );
(5) (C++14 起)
template< class... TTypes, class... UTypes >

bool operator>=( const tuple<TTypes...>& lhs,

                 const tuple<UTypes...>& rhs );
(6) (C++11 起)
(C++14 前)
template< class... TTypes, class... UTypes >

constexpr bool operator>=( const tuple<TTypes...>& lhs,

                           const tuple<UTypes...>& rhs );
(6) (C++14 起)

1-2) 比较 tuple lhs 的每个元素和 tuple rhs 的对应元素。

3-6) 以字典序比较 lhsrhs ,即比较首元素,若相等则比较第二元素,若均相等则比较第三元素,以此类推。

所有比较运算符是短路的;它们在确定结果所必须的比较之外不访问 tuple 元素。

目录

[编辑] 参数

lhs, rhs - 要比较的 tuple

[编辑] 返回值

1) 若对于所有 [0, sizeof...(Types)) 中的 i 有 std::get<i>(lhs) == std::get<i>(rhs) 则为 true ,否则为 false 。对二个空 tuple 返回 true

2) !(lhs == rhs)

3) (bool)(std::get<0>(lhs) < std::get<0>(rhs)) || (!(bool)(std::get<0>(rhs) < std::get<0>(lhs)) && lhstail < rhstail) ,其中 lhstail 是无首元素的 lhs ,而 rhstail 是无首元素的 rhs 。对于二个空 tuple ,返回 false

4) !(rhs < lhs)

5) rhs < lhs

6) !(lhs < rhs)

[编辑] 示例

因为 operator< 对 tuples 定义,故能排序 tuple 的容器。

#include <iostream>
#include <tuple>
#include <vector>
#include <algorithm>
int main()
{
    std::vector<std::tuple<int, std::string, float>> v;
    v.emplace_back(2, "baz", -0.1);
    v.emplace_back(2, "bar", 3.14);
    v.emplace_back(1, "foo", 100.1);
    std::sort(v.begin(), v.end());
 
    for(auto p: v) {
        std::cout << "(" << std::get<0>(p) << ", " << std::get<1>(p)
                  << ", " << std::get<2>(p) << ")\n";
    }
}

输出:

(1, foo, 100.1)
(2, bar, 3.14)
(2, baz, -0.1)

[编辑] 参阅