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 T2
templat . 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.