1.pair算是一个结构体模版,定义的时候是这样的:
pair<T1,T2> P;
其中T1,T2可以是int,string,double,甚至是vector<>。
2.进行初始化是这样的:
pair<int,int> a(12,34);
也可以借用make_pair()函数:
pair<int,int> a; a=make_pair(12,34);
3.进行调用是很简单的:
pair<int,int> a(12,34); printf("%d %d",a.first,a,second);
4.如果对pair进行排序,进行的是字典序比较。
pair<int,int> a[100];
可以用sort(a,a+100)进行排序。
5.下面有个小程序来展示他的用法。
(这个程序用于解决贪心法当中的区间调度问题。)
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int MAX_N=100000; int N,S[MAX_N],T[MAX_N]; pair<int,int> itv[MAX_N]; void solve(){ //对pair进行的是字典序比较 //为了让结束时间早的工作排在前面,把T存入first,把S存入second for(int i=0;i<N;i++){ itv[i].first=T[i]; itv[i].second=S[i]; } sort(itv,itv+N); //t是最后所选工作的结束时间。 int ans=0,t=0; for(int i=0;i<N;i++){ if(t<itv[i].second){ ans++; t=itv[i].first; } } printf("%d ",ans); } /* 本程序用于解决贪心法当中的区间调度问题 测试数据 5 1 2 4 6 8 3 5 7 9 10 */ int main() { scanf("%d",&N); for(int i=0;i<N;i++){ scanf("%d",&S[i]); } for(int i=0;i<N;i++){ scanf("%d",&T[i]); } solve(); return 0; }