C++文档阅读笔记-STL中pair的初步解析

一个结构体,这个结构体提供了融合2个对象变为一个对象的能力;

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
      );
      void swap(pair<Type1, Type2>& _Right)
   };

下面给出官方的栗子:

运行截图如下:

C++文档阅读笔记-STL中pair的初步解析

源码如下:

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

	getchar();
}

从这个例子可以看出,pair一般与map搭配使用,难怪看大佬敲代码,就会用pair进行操作!