分享方式:


pair 結構

提供可將兩個物件視為單一物件之功能的結構。

語法

struct pair
{
    typedef T1 first_type;
    typedef T2 second_type;
    T1 first;
    T2 second;
    constexpr pair();
    pair(const pair&) = default;
    pair(pair&&) = default;
    constexpr pair(
        const T1& Val1,
        const T2& Val2);

    template <class Other1, class Other2>
    constexpr pair(const pair<Other1, Other2>& Right);

    template <class Other1, class Other2>
    constexpr pair(const pair <Other1 Val1, Other2 Val2>&& Right);

    template <class Other1, class Other2>
    constexpr pair(Other1&& Val1, Other2&& Val2);

    template <class... Args1, class... Args2>
    pair(piecewise_construct_t, tuple<Args1...> first_args, tuple<Args2...> second_args);

    pair& operator=(const pair& p);
    template<class U1, class U2> pair& operator=(const pair<U1, U2>& p);
    pair& operator=(pair&& p) noexcept(see below );
    template<class U1, class U2> pair& operator=(pair<U1, U2>&& p);

    void swap(pair& p) noexcept(see below );
};

template<class T1, class T2>
    pair(T1, T2) -> pair<T1, T2>;

參數

Val1
值,初始化 pair 第一個項目。

Val2
值,初始化 pair 第二個項目。

Right
配對,其值要用來初始化另一個配對的項目。

傳回值

第一個 (default) 建構函式會將配對的第一個專案初始化為 類型 T1 預設值,並將第二個專案初始化為 類型 T2預設值。 如果這兩種類型都是可預設建構的,則會加以定義。

第二個建構函式會將配對的第一個專案初始化為 Val1 ,並將第二個元素初始化為 Val2。 如果這兩種類型都是可複製建構的,則會加以定義。

第三個 (template) 建構函式會將配對的第一個專案初始化為 Right第一個 ,第二個到 Rightsecond。 如果兩種類型的配對都是從提供的實值型別建構的,則會加以定義。

第四個建構函式會將配對的第一個專案初始化為 Val1,並使用 Rvalue Reference Declarator 將第二個元素初始化為 Val2: 和 。 如果兩種類型的配對都是從提供的實值型別建構的,則會加以定義。

備註

範本結構會分別儲存一組 型 T1 別和 T2的物件。 此類型 first_type 與樣板參數 T1 相同,類型 second_type 與樣板參數 T2相同。 T1T2 每個只需要提供預設建構函式、單一自變數建構函式和解構函式。 型 pair 別的所有成員都是公用的,因為類型宣告為 struct ,而不是 宣告為 class。 配對最常見的兩種用途是當作函式的傳回類型,這些函式會傳回兩個值,以及當作關聯容器類別 map 類別multimap 類別的項目,這些類別都具有與每個項目相關聯的索引鍵和實值類型。 後者符合配對關聯容器的需求,且其實值型別為 pair< const key_type, mapped_type >

範例

// utility_pair.cpp
// compile with: /EHsc
#include <utility>
#include <map>
#include <iomanip>
#include <iostream>

int main( )
{
   using namespace std;

   // Using the constructor to declare and initialize a pair
   pair <int, double> p1 ( 10, 1.1e-2 );

   // Compare using the helper function to declare and initialize a pair
   pair <int, double> p2;
   p2 = make_pair ( 10, 2.22e-1 );

   // Making a copy of a pair
   pair <int, double> p3 ( p1 );

   cout.precision ( 3 );
   cout << "The pair p1 is: ( " << p1.first << ", "
        << p1.second << " )." << endl;
   cout << "The pair p2 is: ( " << p2.first << ", "
        << p2.second << " )." << endl;
   cout << "The pair p3 is: ( " << p3.first << ", "
        << p3.second << " )." << endl;

   // Using a pair for a map element
   map <int, int> m1;
   map <int, int>::iterator m1_Iter;

   typedef pair <int, int> Map_Int_Pair;

   m1.insert ( Map_Int_Pair ( 1, 10 ) );
   m1.insert ( Map_Int_Pair ( 2, 20 ) );
   m1.insert ( Map_Int_Pair ( 3, 30 ) );

   cout << "The element pairs of the map m1 are:";
   for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
      cout << " ( " << m1_Iter -> first << ", "
           << m1_Iter -> second << " )";
   cout   << "." << endl;

   // Using pair as a return type for a function
   pair< map<int,int>::iterator, bool > pr1, pr2;
   pr1 = m1.insert ( Map_Int_Pair ( 4, 40 ) );
   pr2 = m1.insert ( Map_Int_Pair (1, 10 ) );

   if( pr1.second == true )
   {
      cout << "The element (4,40) was inserted successfully in m1."
           << endl;
   }
   else
   {
      cout << "The element with a key value of\n"
           << " ( (pr1.first) -> first ) = " << ( pr1.first ) -> first
           << " is already in m1,\n so the insertion failed." << endl;
   }

   if( pr2.second == true )
   {
      cout << "The element (1,10) was inserted successfully in m1."
           << endl;
   }
   else
   {
      cout << "The element with a key value of\n"
           << " ( (pr2.first) -> first ) = " << ( pr2.first ) -> first
           << " is already in m1,\n so the insertion failed." << endl;
   }
}
The pair p1 is: ( 10, 0.011 ).
The pair p2 is: ( 10, 0.222 ).
The pair p3 is: ( 10, 0.011 ).
The element pairs of the map m1 are: ( 1, 10 ) ( 2, 20 ) ( 3, 30 ).
The element (4,40) was inserted successfully in m1.
The element with a key value of
( (pr2.first) -> first ) = 1 is already in m1,
so the insertion failed.