直接进入主题,请看pair的源码:
namespace std{
template<typename T1,typename T2>
struct pair{
typedef T1 first_type; //简化类型名称
typedef T2 second_type;
T1 first; //两个数据成员
T2 second;
pair():first(T1()),second(T2()){} //默认构造函数,用类型的默认构造函数初始化两个数据成员
pair(const T1& a,const T2& b):first(a),second(b){}//构造函数,用a初始化first,用b初始化second
template<typename U,typename V> //模板函数,拷贝构造函数
pair(const pair<U,V>& p):first(p.first),second(p.second){}
};
template<typename T1,typename T2> //模板函数,操作符重载之==
bool operator==(const pair<T1,T2>&,const pair<T1,T2>&);
template<typename T1,typename T2> // <符重载
bool operator<(const pair<T1,T2>&,const pair<T1,T2>&);
//还有!=,<=,>,>=省略了
}
很简单吧,注意,struct默认权限是public的,这么以来所有成员都是public的,我们因此可以直接存取pair中的个别值;
接下来再给大家带来一个便捷的函数,make_pair()
namespace std{
template<typename T1,typename T2>
pair<T1,T2>make_pair(const T1& x,const T2& y){
return pair<T1,T2>(x,y);
}
}
下面是两个具体的运用:
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main(){
vector<pair<string,int> >v;
string name;
int age;
while(cin>>name>>age){
v.push_back(make_pair(name,age));
}
for(vector<pair<string,int> >::iterator itera=v.begin();itera!=v.end();++itera){
cout<<(*itera).first<<"----->"<<(*itera).second<<endl;
}
system("pause");
return 0;
}
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main(){
pair<string,int>p1("zhang",22);
pair<string,int>p2("zhan",22);
cout<<(p1==p2)<<endl;
cout<<(p1>p2)<<endl;
cout<<(p1<p2)<<endl;
p2.first="zhang";
cout<<"****************"<<endl;
cout<<(p1==p2)<<endl;
cout<<(p1>p2)<<endl;
cout<<(p1<p2)<<endl;
system("pause");
return 0;
}
pair在标准函数库用的特别多,尤其是map和multimap