operator==,!=,<,<=,>,>=(std::tuple)
ヘッダ <tuple> で定義
|
||
template< class... TTypes, class... UTypes > bool operator==( const tuple<TTypes...>& lhs, |
(1) | (C++11以上) (C++14以上ではconstexpr) |
template< class... TTypes, class... UTypes > bool operator!=( const tuple<TTypes...>& lhs, |
(2) | (C++11以上) (C++14以上ではconstexpr) |
template< class... TTypes, class... UTypes > bool operator<( const tuple<TTypes...>& lhs, |
(3) | (C++11以上) (C++14以上ではconstexpr) |
template< class... TTypes, class... UTypes > bool operator<=( const tuple<TTypes...>& lhs, |
(4) | (C++11以上) (C++14以上ではconstexpr) |
template< class... TTypes, class... UTypes > bool operator>( const tuple<TTypes...>& lhs, |
(5) | (C++11以上) (C++14以上ではconstexpr) |
template< class... TTypes, class... UTypes > bool operator>=( const tuple<TTypes...>& lhs, |
(6) | (C++11以上) (C++14以上ではconstexpr) |
1-2) タプル lhs
のすべての要素を、タプル rhs
の対応する要素と比較します。
3-6) lhs
と rhs
を辞書的に比較します。 つまり、第1要素を比較し、それが等しければ第2要素を比較し、それが等しければ第3要素を比較し、以下同様です。
すべての比較演算子は短絡評価を行います。 比較の結果を決定するために必要な部分を超えるタプルの要素はアクセスされません。
目次 |
[編集] 引数
lhs, rhs | - | 比較するタプル |
[編集] 戻り値
1) [0, sizeof...(Types))
のすべての I について std::get<i>(lhs) == std::get<i>(rhs) であれば true、そうでなければ false を返します。 2つの空タプルの比較に対しては 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
は las から最初の要素を除いたもので、 rhstail
は rhs から最初の要素を除いたものです。 2つの空タプルの比較に対しては false を返します。
4) !(rhs < lhs) を返します。
5) rhs < lhs を返します。
6) !(lhs < rhs) を返します。
[編集] 例
operator< がタプルに対して定義されているため、タプルのコンテナはソートすることができます。
#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)