STL之pair源码分析

97 篇文章 0 订阅
92 篇文章 0 订阅

直接进入主题,请看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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值