struktur pasangan

Struktur yang menyediakan kemampuan untuk memperlakukan dua objek sebagai satu objek.

Sintaks

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>;

Parameter

Val1
Nilai yang menginisialisasi elemen pertama dari pair.

Val2
Nilai yang menginisialisasi elemen kedua dari pair.

Kanan
Pasangan yang nilainya akan digunakan untuk menginisialisasi elemen pasangan lain.

Tampilkan Nilai

Konstruktor pertama (default) menginisialisasi elemen pertama dari pasangan ke default jenis T1 dan elemen kedua ke default jenis T2. Ini didefinisikan jika kedua jenis dapat dibangun secara default.

Konstruktor kedua menginisialisasi elemen pertama dari pasangan ke Val1 dan yang kedua ke Val2. Ini didefinisikan jika kedua jenis dapat disalin.

Konstruktor ketiga (templat) menginisialisasi elemen pertama pasangan ke Right. pertama dan yang kedua ke Right. kedua. Ini didefinisikan jika kedua jenis pasangan dapat dibangun dari jenis nilai yang disediakan.

Konstruktor keempat menginisialisasi elemen pertama dari pasangan ke Val1 dan yang kedua ke Val2 menggunakan Deklarator Referensi Rvalue: &&&. Ini didefinisikan jika kedua jenis pasangan dapat dibangun dari jenis nilai yang disediakan.

Keterangan

Struktur templat menyimpan sepasang objek jenis T1 dan T2, masing-masing. Jenisnya first_type sama dengan parameter T1 templat dan jenisnya second_type sama dengan parameter T2templat . T1 dan T2 masing-masing hanya perlu menyediakan konstruktor default, konstruktor argumen tunggal, dan destruktor. Semua anggota jenis pair bersifat publik, karena jenisnya dinyatakan sebagai struct bukan sebagai class. Dua penggunaan paling umum untuk pasangan adalah sebagai jenis pengembalian untuk fungsi yang mengembalikan dua nilai dan sebagai elemen untuk kelas kontainer asosiatif memetakan Kelas dan Kelas multimap yang memiliki kunci dan jenis nilai yang terkait dengan setiap elemen. Yang terakhir memenuhi persyaratan untuk kontainer asosiatif pasangan dan memiliki jenis nilai formulir pair< const key_type, mapped_type >.

Contoh

// 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.