std::get(std::pair)
ja.cppreference.net より
| ヘッダ <utility>
|
||
template< std::size_t I, class T1, class T2 >
typename std::tuple_element<I, std::pair<T1,T2> >::type&
get( std::pair<T1, T2>& p ) noexcept;
|
で定義 (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&
get( const std::pair<T1,T2>& p ) noexcept;
|
(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&&
get( std::pair<T1,T2>&& p ) noexcept;
|
(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&&
get( const std::pair<T1,T2>&& p ) noexcept;
|
(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 (by index)
C++14 (by type) |
const pair&& に対するオーバーロードが存在しない | オーバーロードが追加される |
関連項目
| Structured binding (C++17) | 指定された名前を初期化子の部分オブジェクトまたはタプルの要素にバインドする |
|
(C++11)
|
タプルの指定された要素にアクセスする
(function template) |
|
(C++11)
|
array
の要素にアクセスする
(function template) |
|
(C++17)
|
インデックスまたは型(型が一意の場合)を指定してvariantの値を読み取り、エラー時には例外をスローする
(function template) |
|
(C++20)
|
std::ranges::subrange
からイテレータまたはセンチネルを取得する
(function template) |
|
(C++26)
|
std::complex
から実部または虚部への参照を取得する
(function template) |