pair的定义和结构
- 模板类
- 一对值的组合
- 头文件
<utility>
- 两个模板参数,T1和T2,分别表示第一个值和第二个值的类型
- 两个成员变量,first和second,分别表示第一个值 和第二个值
- 有一些成员函数和特性
- 默认构造函数
- 带参数的构造函数
- 比较运算符重载
-
可以将两个值组合在一起进行传递,存储,操作(组合在一起作为函数的返回值,或者将一堆值存储在容器中)
#include <bits/stdc++.h>
using namespace std;
int main()
{
pair<int,double> p1(1,3.14);
pair<char,string> p2('a',"hello");
cout << p1.first<<' ' << p1.second <<endl;
cout << p2.first<<' ' << p2.second <<endl;
return 0;
}
pair的嵌套
-
pair可以进行嵌套,可以将一个pair对象作为另一个pair对象的成员.
-
通过嵌套pair,你可以方便的组合多个值,并形成更复杂的数据结构
pair<int,int> p1(1,2);
pair<int,pair<int,int>> p2(3,make_pair(4,5));
pair<pair<int,int>,pair<int,int>> p3(make_pair(6,7),make_pair(8,9));
pair自带排序规则
- pair自带的排序规则是按照first成员进行升序排列的
- first成员相等,则按照second成员进行升序排列
- 如果要按照其他排序规则对pair进行排序,可以自定义比较函数或者使用lambda表达式传递排序算法
代码示例
#include <bits/stdc++.h>
using namespace std;
//建立结构体
struct Person{
string name;
int age;
};
int main()
{//建立一个容器来存放结构体
vector<Person>people;
//给容器插入值
people.push_back({"Alice",25});
people.push_back({"Bob",30});
people.push_back({"Charlie",20});
//再建一个结构体,将pair插入
vector<pair<Person,int>> scores;
//插入值
scores.push_back({people[0],90});
scores.push_back({people[1],87});
scores.push_back({people[2],95});
for(const auto& pair : scores){
cout << "Name:" << pair.first.name << endl;
cout << "Age:" << pair.first.age << endl;
cout << "Score:" << pair.second << endl;
cout << endl;
}
}
错误麻烦评论区指出