pair的定义和结构

  • 模板类
  • 一对值的组合
  • 头文件<utility>
  1. 两个模板参数,T1和T2,分别表示第一个值和第二个值的类型
  2. 两个成员变量,first和second,分别表示第一个和第二个
  3. 有一些成员函数和特性
  • 默认构造函数
  • 带参数的构造函数
  • 比较运算符重载
  1. 可以将两个值组合在一起进行传递,存储,操作(组合在一起作为函数的返回值,或者将一堆值存储在容器中)
#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;
    }
}

错误麻烦评论区指出