C++pair用法

1 pair的应用
pair是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存。另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。 pair的实现是一个结构体,主要的两个成员变量是first second 因为是使用struct不是class,所以可以直接使用pair的成员变量。

2 pair的构造
std::pair主要的作用是将两个数据组合成一个数据,两个数据可以是同一类型或者不同类型。例如std::pair 或者 std::pair等。pair实质上是一个结构体,其主要的两个成员变量是first和second,这两个变量可以直接使用。初始化一个pair可以使用构造函数,也可以使用std::make_pair函数,make_pair函数的定义如下:
template pair make_pair(T1 a, T2 b) { return pair(a, b); }
一般make_pair都使用在需要pair做参数的位置,可以直接调用make_pair生成pair对象。 另一个使用的方面就是pair可以接受隐式的类型转换,这样可以获得更高的灵活度。但是这样会出现如下问题:例如有如下两个定义:
std::pair(1, 1.1);
std::make_pair(1, 1.1);
其中第一个的second变量是float类型,而make_pair函数会将second变量都转换成double类型。这个问题在编程是需要引起注意。
//一些知识点来自其他大佬博客总结,如有侵权可删除

题目描述
现在各大 oj 上有 n个比赛,每个比赛的开始、结束的时间点是知道的。yyy 认为,参加越多的比赛,noip 就能考的越好(假的)。所以,他想知道他最多能参加几个比赛。由于 yyy 是蒟蒻,如果要参加一个比赛必须善始善终,而且不能同时参加 2个及以上的比赛。

输入
第一行是一个整数 n,接下来 n行每行是 2个整数 a,b(a 输出
一个整数最多参加的比赛数目。
样例输入
3
0 2
2 4
1 3
样例输出

2

解题代码(使用结构体)

#include
#include
using namespace std;
struct tian7 {
    int a;
    int b;
} c[100005];
bool cmp(tian7 x,tian7 y) {
    return x.b<y.b;
}
int main() {
    int n;
    cin>>n;
    for(int i=0; i<n; i++)
        cin>>c[i].a>>c[i].b;
    sort(c,c+n,cmp);
    int sum=1;
    int max=c[0].b;
    for(int i=1; i<n; i++) {
        if(c[i].a>=max) {
            sum++;
            max=c[i].b;
        }
    }
    cout<<sum<<endl;
    return 0;
}

解题代码(pair函数)

#include
#include
#include 
using namespace std;
pair<int,int>p[105];
int cmp(pair<int,int>a,pair<int,int>b) {
	return a.second<b.second;
}
int main() {
	int n;
	cin>>n;
	for(int i=0; i<n; i++)
		cin>>p[i].first>>p[i].second;
	sort(p,p+n,cmp);
	int sum=1;
	int max=p[0].second;
	for(int i=1; i<n; i++) {
		if(p[i].first>=max) {
			sum++;
			max=p[i].second;
		}
	}
	cout<<sum<<endl;
	return 0;
}

你可能感兴趣的:(C++,c++,算法,开发语言)