Partager via


pair, structure

Une structure qui fournit la capacité à traiter deux objets comme un seul objet.

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

Paramètres

  • _Val1
    Valeur qui initialise le premier élément de pair.

  • _Val2
    Valeur qui initialise le second élément de pair.

  • _Right
    Une paire dont les valeurs doivent être utilisées pour initialiser les éléments d'autres paire.

Valeur de retour

Le premier constructeur (par défaut) initialise le premier élément des paires la valeur au type par défaut Type1 et le second élément au type par défaut Type2.

Le deuxième constructeur initialise le premier élément de la paire à _Val1 et le second à _Val2.

Le troisième constructeur (modèle) initialise le premier élément de la paire à _Right.première et le second à _Right.seconde.

Le quatrième constructeur initialise le premier élément de la paire à _Val1 et le second à _Val2 en utilisant Déclarateur de référence Rvalue : &&.

Notes

La structure de modèle fournit une paire d'objets de type Type1 et Type2, respectivement. Le type first_type est identique au paramètre Type1 de modèle et le type second_type est identique au paramètre Type2de modèle. Type1 et Type2 ont chacun besoin d'un seul un constructeur par défaut, un constructeur à un seul argument, et un destructeur. Tous les membres du type pair sont publics, car le type est déclaré comme struct plutôt que classe. Les deux utilisations les plus courantes pour une paire sont comme type de retour des fonctions qui retournent deux valeurs et comme éléments des classes de conteneur associatives classe de map et classe multimap qui ont toutes deux une clé et un type de valeur associé à chaque élément. Ce dernier répond aux besoins d'un conteneur associatif de paires et possède un type de valeur du formulaire pair<const key_type, mapped_type>.

Exemple

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

Configuration requise

En-tête : <utility>

Espace de noms : std

Voir aussi

Référence

pair, opérateur logique

Sécurité des threads dans la bibliothèque standard C++