总结
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;
}