STL–第二章 pair[x,y]

可以理解为(x,y)数学中的坐标表示

小技巧:使用typedef定义

typedef pair<int,int> PII

头文件

#include <utility>

初始化

格式:pair<first的数据类型,second的数据类型>元素名;

pair中只有两个元素,first和second

//两种方式初始化
pair<string,int> p("hello",1);
pair<string,int> p = make_pair("hello",1);

first()和second()

pair<string,int> p("hello",1);
p.first;//第一个元素=hello
p.second;//第二个元素=1

嵌套

vector<pair<int,int>>//与vector结合
//套娃操作,用pair存储3个元素
pair<int,pair<int,int>> p(1,{
   2,3});

当pair结合sort()函数使用时,pair默认对first升序,当first相同时对second升序(从小到大)。也可以通过修改cmp函数达到对second进行排序。

#define _f(i,a,b) for(auto i=a;i<b;i++)
#include <iostream>
#include <cstdio>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;
//自定义排序规则:按second升序排序
bool cmp(pair<int, int> a, pair<int, int> b) {
   
	return a.second < b.second;
}
int main()
{
   
	pair<int, int> p[100];
	p[0] = make_pair(1, 6);
	p[1] = make_pair(2, 3);
	p[2] = make_pair(2, 5);

	sort(p, p + 3, cmp);
	_f(i, 0, 3) {
   
		cout << p[i].first << "," << p[i].second << endl;
	}
}

输出:

2,3
2,5
1,6