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;
}
}
錯誤麻煩評論區指出