STL容器(Pair)

总结

1)pair就是一个有两个元素的结构体,方便使用,也类似map但是,键值可以随意用。

2)常见用法

(1)用来替代二元结构体及其构造函数,可以节省编码时间。

(2)作为map的键值对来进行插入。

#include<iostream>
#include<queue>
#include<string>
#include<utility> 
#include<map>
using namespace std;
int main (){
	map<string, int> mp;
	mp.insert(make_pair("heihei", 5));
	mp.insert(pair<string, int>("haha", 6));
	for(map<string, int>::iterator it = mp.begin(); it != mp.end(); it++){
		cout << it->first << " " << it->second << endl; 
	}
	return 0;
}

什么是pair?

pair是一个很实用的“小玩意” ,当想要将两个元素绑在一起作为一个合成元素时,又不想定义结构体,就可以使用pair,也就是说,pair实际上可以看成内部有两个元素的结构体,

就像下面一样

struct pair{
	typename1 first;
	typename2 second;
};

pair的使用

1)定义

+头文件

#include<utility> 
using namespace std;

utility不是很好记,那么由于map中的内部就是pair,因此我们直接用 map就可以。

#include<map>
using namespace std;

这时我们好像感觉那pair和map有什么区别没?

可以这样想,map是 pair的集合,就是固定长度数组和 变长数组的区别。

pair<typename1, typename2> p;

定义 string 到 int

pair<string, int> p;

初始换只需要跟上一个小括号

pair<string, int> p("haha", 5);

 如果想要在代码中临时构建一个pair,有以下两种方式。

(1)将类型定义写在前面,后面用小括号内两个元素的方式,

pair<string, int>("haha", 5);

(2)用自带make_pair()函数

make_pair("haha", 5);

2)pair元素的访问

pair中就有两个元素,分别是 first 和 second, 按正常结构体访问就可以。

#include<iostream>
#include<queue>
#include<string>
#include<utility> 
#include<map>
using namespace std;
int main (){
	pair<string, int> p;
	p.first = "haha";
	p.second = 5;
	cout << p.first << " " << p.second << endl;
	p = make_pair("xixi", 66);
	cout << p.first << " " << p.second << endl;
	p = pair<string, int>("hehe", 999);
	cout << p.first << " " << p.second << endl;
	return 0;
}

常用函数

1)比较,两个pair类型的数据可以直接使用 !=  ==  < > >= <= 比较大小,比较规则是,先以first的大小作为比较的标准,只有当first 相等的时候才会去比较second的大小

#include<iostream>
#include<queue>
#include<string>
#include<utility> 
#include<map>
using namespace std;
int main (){
	pair<int, int> p1(5, 10);
	pair<int, int> p2(5, 15);
	pair<int, int> p3(10, 5);
	if(p1 < p3) cout << "p1 < p3" << endl;
	if(p1 <= p3 ) cout << "p1 <= p3" << endl;
	if(p1 < p2) cout << "p1 < p2" << endl; 
	return 0;
}

猜你喜欢

转载自blog.csdn.net/Harington/article/details/87876696