Aracılığıyla paylaş


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 pairbaşlatan değer.

Val2
değerinin ikinci öğesini pairbaş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ü T2varsayı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 Rightbaş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 T2türünde T1 bir çift nesne depolar. türü first_type şablon parametresiyle T1 aynıdır ve tür second_type şablon parametresiyle T2aynı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 classdeğ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.