pair Yapısı
İki nesneyi tek bir nesne olarak ele alma olanağı sağlayan bir yapı.
Sözdizimi
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>;
Parametreler
Val1
değerinin ilk öğesini pair
başlatan değer.
Val2
değerinin ikinci öğesini pair
başlatan değer.
Right
Değerleri başka bir çiftin öğelerini başlatmak için kullanılacak bir çift.
Dönüş Değeri
İlk (varsayılan) oluşturucu, çiftin ilk öğesini varsayılan türüne T1
, ikinci öğesini de türü T2
varsayılan olarak başlatır. Her iki tür de varsayılan olarak oluşturulduğunda tanımlanır.
İkinci oluşturucu, çiftin ilk öğesini Val1'e, ikincisi val2'ye başlatır. Her iki tür de kopyalanabilirse tanımlanır.
Üçüncü (şablon) oluşturucu, çiftinin ilk öğesini olarak Right
başlatır. önce ve ikincisi için Right
. saniye. Çiftin her iki türü de sağlanan değer türlerinden yapılsa tanımlanır.
Dördüncü oluşturucu, çiftin ilk öğesini Val1'e, ikinci öğesini de Rvalue Başvuru Bildirimcisi'ni kullanarak Val2'ye başlatır: &&. Çiftin her iki türü de sağlanan değer türlerinden yapılsa tanımlanır.
Açıklamalar
Şablon yapısı sırasıyla ve T2
türünde T1
bir çift nesne depolar. türü first_type
şablon parametresiyle T1
aynıdır ve tür second_type
şablon parametresiyle T2
aynıdır. T1
ve T2
her birinin yalnızca varsayılan bir oluşturucu, tek bağımsız değişkenli bir oluşturucu ve bir yıkıcı sağlaması gerekir. Türün pair
tüm üyeleri geneldir, çünkü tür olarak class
değil olarak struct
bildirilir. Bir çift için en yaygın iki kullanım, iki değer döndüren işlevler için dönüş türleri ve ilişkili kapsayıcı sınıfları için hem anahtar hem de her öğeyle ilişkili bir değer türüne sahip Sınıf ve çok eşlemeli Sınıf eşleme öğeleri olarak kullanılır. İkincisi, bir çift ilişkilendirici kapsayıcının gereksinimlerini karşılar ve biçiminde pair< const key_type, mapped_type >
bir değer türüne sahiptir.
Örnek
// 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.