Freigeben über


pair-Struktur

Eine Struktur, die bereitstellt, mit denen die Fähigkeit zwei Objekte als einzelnes Objekt behandelt.

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

Parameter

  • _Val1
    Wert, der das erste Element aus pair initialisiert.

  • _Val2
    Wert, der das zweite Element von pair initialisiert.

  • _Right
    Ein Paar, dessen Werte verwendet werden sollen, die Elemente einer anderen als Paar zu initialisieren.

Rückgabewert

Der erste (Standard) Konstruktor initialisiert erstes Element der Paare dem Standardwert des Typs Type1 und des zweiten Elements dem Standardwert des Typs Type2.

Der zweite Konstruktor initialisiert erstes Element der Paare von _Val1 und Sekunden zu _Val2.

Der dritte (Vorlagen) Konstruktor initialisiert erstes Element der Paare von _Right.erstens und Sekunde in _Right.zweitens.

Der vierte Konstruktor initialisiert erstes Element der Paare von _Val1 und Sekunden zu _Val2 mit Rvalue-Verweisdeklarator: &&.

Hinweise

Die Vorlagenstruktur speichert ein Paar Objekte des Typs Type1 und Type2, bzw. Der Typ first_type ist identisch, den der Vorlagenparameter Type1 und der Typ second_type identisch der Vorlagenparameter Type2 ist. Type1 und Type2 geben nur jede Anforderung einen Standardkonstruktor, einem EinzelArgumentkonstruktor und einem Destruktor an. Alle Member des Typs pair sind öffentlich, da der Typ als struct und nicht als Klasse deklariert wird. Die beiden häufigste Verwendung für ein Paar bildet als Rückgabetypen für Funktionen, die zwei Werte zurückgeben und während Elemente für den assoziativen Container Zuordnung Klasse und Multimap Klasse-Klassen, die einen Schlüssel und einen Werttyp haben, die jedem Element zugeordnet werden. Der zweite Vorgang wird den Anforderungen für einen Paarassoziativen container erfüllen und über einen Werttyp Formular pair<const key_type, mapped_type>.

Beispiel

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

Anforderungen

Header: Hilfsprogramm <>

Namespace: std

Siehe auch

Referenz

Logischer Operator für Objektpaare

Threadsicherheit in der C++-Standardbibliothek