名前空間
変種
操作

std::pair<T1,T2>::pair

提供: cppreference.com
< cpp‎ | utility‎ | pair
 
 
 
std::pair
メンバ関数
pair::pair
非メンバ関数
(C++11)
推定ガイド(C++17)
ヘルパークラス
(C++11)
 
(1)
pair();
(C++11未満)
constexpr pair();
(C++11以上)
(条件付き explicit)
(2)
pair( const T1& x, const T2& y );
(C++11未満)
pair( const T1& x, const T2& y );
(C++11以上)
(C++14未満)
(条件付き explicit)
constexpr pair( const T1& x, const T2& y );
(C++14以上)
(条件付き explicit)
(3)
template< class U1, class U2 >
pair( U1&& x, U2&& y );
(C++11以上)
(C++14未満)
(条件付き explicit)
template< class U1, class U2 >
constexpr pair( U1&& x, U2&& y );
(C++14以上)
(条件付き explicit)
(4)
template< class U1, class U2 >
pair( const pair<U1, U2>& p );
(C++11未満)
template< class U1, class U2 >
pair( const pair<U1, U2>& p );
(C++11以上)
(C++14未満)
(条件付き explicit)
template< class U1, class U2 >
constexpr pair( const pair<U1, U2>& p );
(C++14以上)
(条件付き explicit)
(5)
template< class U1, class U2 >
pair( pair<U1, U2>&& p );
(C++11以上)
(C++14未満)
(条件付き explicit)
template< class U1, class U2 >
constexpr pair( pair<U1, U2>&& p );
(C++14以上)
(条件付き explicit)
(6)
template< class... Args1, class... Args2 >

pair( std::piecewise_construct_t,
      std::tuple<Args1...> first_args,

      std::tuple<Args2...> second_args );
(C++11以上)
(C++20未満)
template< class... Args1, class... Args2 >

constexpr pair( std::piecewise_construct_t,
                std::tuple<Args1...> first_args,

                std::tuple<Args2...> second_args );
(C++20以上)
pair( const pair& p ) = default;
(7)
pair( pair&& p ) = default;
(8) (C++11以上)

新しいペアを構築します。

1) デフォルトコンストラクタ。 ペアの要素、first および second を両方とも値初期化します。

  • このコンストラクタは、 std::is_default_constructible_v<first_type> および std::is_default_constructible_v<second_type> がどちらも true である場合にのみ、オーバーロード解決に参加します。
  • このコンストラクタは、 first_type または second_type のいずれかが暗黙にデフォルト構築可能でない場合、 explicit になります。
(C++11以上)

2) firstx で、 secondy で初期化します。

(C++11以上)

3) firststd::forward<U1>(x) で、 secondstd::forward<U2>(y) で初期化します。

4) firstp.first で、 secondp.second で初期化します。

  • このコンストラクタは、 std::is_constructible_v<first_type, const U1&> および std::is_constructible_v<second_type, const U2&> がどちらも true の場合にのみ、オーバーロード解決に参加します。
  • このコンストラクタは、 std::is_convertible_v<const U1&, first_type>false であるか、 std::is_convertible_v<const U2&, second_type>false である場合にのみ、 explicit に指定されます。
(C++11以上)

5) firststd::forward<U1>(p.first) で、 secondstd::forward<U2>(p.second) で初期化します。

6) first_args の要素を first のコンストラクタに転送し、 second_args の要素を second のコンストラクタに転送します。 これはコピー可能でもムーブ可能でもない型のペアを作成するために使用できる、デフォルトコンストラクタ以外の唯一のコンストラクタです。

7) コピーコンストラクタはデフォルト化されており、両方の要素のコピーが constexpr 関数の要件を満たす場合は constexpr になります。

8) ムーブコンストラクタはデフォルト化されており、両方の要素のムーブが constexpr 関数の要件を満たす場合は constexpr になります。

目次

[編集] 引数

x - このペアの第1要素を初期化するための値
y - このペアの第2要素を初期化するための値
p - このペアの両方の要素を初期化するために使用される値のペア
first_args - このペアの第1要素を初期化するためのコンストラクタ引数のタプル
second_args - このペアの第2要素を初期化するためのコンストラクタ引数のタプル

[編集] 例外

指定された操作のいずれか (要素のコンストラクタなど) が例外を投げない限り、例外を投げません。

[編集] 欠陥報告

以下の動作変更欠陥報告は以前に発行された C++ 標準に遡って適用されました。

DR 適用先 発行時の動作 正しい動作
N4387 C++11 some constructors were implicit-only, preventing some uses constructors made conditionally-explicit
LWG 2510 C++11 default constructor was implicit made conditionally-explicit

[編集]

#include <utility>
#include <string>
#include <complex>
#include <tuple>
#include <iostream>
 
int main()
{
    std::pair<int, float> p1;
    std::cout << "Value-initialized: "
              << p1.first << ", " << p1.second << '\n';
 
    std::pair<int, double> p2(42, 0.123);
    std::cout << "Initialized with two values: "
              << p2.first << ", " << p2.second << '\n';
 
    std::pair<char, int> p4(p2);
    std::cout << "Implicitly converted: "
              << p4.first << ", " << p4.second << '\n';
 
    std::pair<std::complex<double>, std::string> p6(
                    std::piecewise_construct, 
                    std::forward_as_tuple(0.123, 7.7),
                    std::forward_as_tuple(10, 'a'));
    std::cout << "Piecewise constructed: "
              << p6.first << ", " << p6.second << '\n';
}

出力:

Value-initialized: 0, 0
Initialized with two values: 42, 0.123
Implicitly converted: *, 0
Piecewise constructed: (0.123,7.7), aaaaaaaaaa

[編集] 関連項目

引数の型によって定義された型の pair オブジェクトを作成します
(関数テンプレート) [edit]