std::get(std::pair)
From cppreference.com
| ヘッダ <utility> で定義 |
||
template< std::size_t I, class T1, class T2 > typename std::tuple_element<I, std::pair<T1,T2> >::type& |
(1) | (C++11以降) (C++14以降constexpr) |
template< std::size_t I, class T1, class T2 > const typename std::tuple_element<I, std::pair<T1,T2> >::type& |
(2) | (C++11以降) (C++14以降constexpr) |
template< std::size_t I, class T1, class T2 > typename std::tuple_element<I, std::pair<T1,T2> >::type&& |
(3) | (C++11以降) (C++14以降constexpr) |
template< std::size_t I, class T1, class T2 > const typename std::tuple_element<I, std::pair<T1,T2> >::type&& |
(4) | (C++11以降) (C++14以降constexpr) |
| template< class T, class U > constexpr T& get( std::pair<T, U>& p ) noexcept; |
(5) | (C++14以降) |
| template< class T, class U > constexpr const T& get( const std::pair<T, U>& p ) noexcept; |
(6) | (C++14以降) |
| template< class T, class U > constexpr T&& get( std::pair<T, U>&& p ) noexcept; |
(7) | (C++14以降) |
| template< class T, class U > constexpr const T&& get( const std::pair<T, U>&& p ) noexcept; |
(8) | (C++14以降) |
| template< class T, class U > constexpr T& get( std::pair<U, T>& p ) noexcept; |
(9) | (C++14以降) |
| template< class T, class U > constexpr const T& get( const std::pair<U, T>& p ) noexcept; |
(10) | (C++14以降) |
| template< class T, class U > constexpr T&& get( std::pair<U, T>&& p ) noexcept; |
(11) | (C++14以降) |
| template< class T, class U > constexpr const T&& get( const std::pair<U, T>&& p ) noexcept; |
(12) | (C++14以降) |
タプル風インターフェースを使用してペアから要素を抽出します。
1-4) インデックスベースのオーバーロードは、インデックス
I が 0 でも 1 でもない場合にコンパイルに失敗します。5-12) 型ベースのオーバーロードは、型
T と U が同じ場合にコンパイルに失敗します。目次 |
[編集] パラメータ
| p | - | 抽出する内容を持つペア |
[編集] 戻り値
1-4) I == 0 の場合は p.first への参照を返し、I == 1 の場合は p.second への参照を返します。
5-8) p.first への参照を返します。
9-12) p.second への参照を返します。
[編集] 例
このコードを実行
#include <iostream> #include <utility> int main() { auto p = std::make_pair(1, 3.14); std::cout << '(' << std::get<0>(p) << ", " << std::get<1>(p) << ")\n"; std::cout << '(' << std::get<int>(p) << ", " << std::get<double>(p) << ")\n"; }
出力
(1, 3.14) (1, 3.14)
[編集] 欠陥報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 2485 | C++11 (インデックスによる) C++14 (型による) |
const pair&& のオーバーロードはありません | オーバーロードが追加されました |
[編集] 関連項目
| 構造化束縛 (C++17) | 指定された名前を初期化子のサブオブジェクトまたはタプル要素に束縛します |
| (C++11) |
tuple は指定された要素にアクセスする (関数テンプレート) |
| (C++11) |
array の要素にアクセスする(関数テンプレート) |
| (C++17) |
インデックスまたは型(型が一意である場合)を指定して variant の値を読み取る。エラーの場合は例外をスローする (function template) |
| (C++20) |
std::ranges::subrange からイテレータまたはセンチネルを取得します (関数テンプレート) |
| (C++26) |
std::complex から実部または虚部への参照を取得します (関数テンプレート) |