pair

777CC發表於2024-03-02

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;
    }
}

錯誤麻煩評論區指出