Condividi tramite


pair Structure

Una struttura che fornisce la possibilità di gestire due oggetti come singolo oggetto.

template<class Type1, class Type2>
   struct pair 
   {
   typedef Type1 first_type;
   typedef Type2 second_type;
   Type1 first;
   Type2 second;
   pair( );
   pair(
      const Type1& __Val1, 
      const Type2& __Val2
   );
   template<class Other1, class Other2>
      pair(
         const pair<Other1, Other2>& _Right
      );
   template<class Other1, class Other2>
      pair(
         Other1&& _Val1, Other2&& _Val2
      );
   };

Parametri

  • _Val1
    Valore che inizializza il primo elemento pair.

  • _Val2
    Valore che inizializza il secondo elemento pair.

  • _Right
    Una coppia dei cui valori verranno utilizzati per inizializzare gli elementi di un'altra coppia.

Valore restituito

Il primo costruttore predefinito () inizializza il primo elemento della coppia all'impostazione predefinita di tipo Type1 e il secondo elemento all'impostazione predefinita di tipo Type2.

Il secondo costruttore inizializza il primo elemento della coppia a _Val1 e successivamente a _Val2.

Il terzo costruttore (modello) inizializza il primo elemento della coppia a _Right.primo e successivamente a _Right.second.

Il quarto costruttore inizializza il primo elemento della coppia a _Val1 e successivamente a _Val2 utilizzando Dichiarazione di riferimento Rvalue: &&.

Note

La struttura del modello archivia una coppia di oggetti di tipo Type1 e Type2, rispettivamente.Il tipo first_type è uguale al parametro di template Type1 e il tipo second_type corrisponda al parametro di template Type2.Type1 e Type2 ogni necessario fornire solo un costruttore predefinito, un costruttore con un singolo argomento e un distruttore.Tutti i membri del tipo pair sono pubblici, perché il tipo viene dichiarato come struct anziché come class.Nei due utilizzi comuni per una coppia sono come tipi restituiti per le funzioni che restituiscono due valori e come elementi delle classi di contenitori associative classe di mapping e classe di multimap che dispongono di una chiave che un tipo di valore associati a ciascun elemento.L'ultimo soddisfi i requisiti per un contenitore associativo della coppia e dispone di un tipo di valore del form pair<constkey_type, mapped_type>.

Esempio

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

Requisiti

intestazione: <utility>

Spazio dei nomi: deviazione standard

Vedere anche

Riferimenti

Pair Logical Operator

Thread safety della libreria C++ standard