一.解釋:
pair是STL中的模板類型,它可以存儲兩個元素,它也被稱作“對組”。沒有什麼成員函數,源代碼很簡單。
pair 是“二元結構體”的替代品,將兩個元素捆綁在一起,節省編碼時間。相當於以下定義:
struct pair
{ typename1 first;
typename2 second;
}
pair將一對值組合成一個值,就是一個結構體,但是比結構體更加得靈活,這一對值可以具有不同的數據類型(T1和T2),兩個值可以分別用pair的兩個公有函數first和second訪問。
pair是將2個數據組合成一個數據,當需要這樣的需求時就可以使用pair,如stl中的map就是將key和value放在一起來保存(說簡單點就是映射)。另一個應用是,當一個函數需要返回2個數據的時候,可以選擇pair。 簡而言之pair就是結構體,主要的兩個成員變量是first second,可以直接使用pair的成員變量。
二.用法:
1.定義方法
pair<int, double> p1; //使用默認構造函數
pair<int, double> p2(1, 2.4); //用給定值初始化
pair<int, double> p3(p2); //拷貝構造函數
2.訪問操作
對於pair類,由於它只有兩個元素,分別名爲first和second,因此直接使用普通的點操作符即可訪問其成員
pair<string, string> a("Lily", "Poly");
string name;
name = pair.second;
/*a.first 返回Lily
a.second 返回 Poly*/
#include <bits/stdc++.h>
using namespace std;
typedef struct pair<int,float> PAIR_IF;
int main()
{
PAIR_IF pair1=make_pair(18,3.14f);
cout << pair1.first << " " << pair1.second << endl;
pair1.first=10;
pair1.second=1.0f;
cout << pair1.first << " " << pair1.second << endl;
}
3.make_pair操作
生成新的pair對象,可以使用對已存在的兩個數據構造一個新的pair類型
int a = 8;
string m = "James";
pair<int, string> newone;
newone = make_pair(a, m);
#include <bits/stdc++.h>
using namespace std;
pair<string,int> p;
int main()
{
string str = "直接複製也可以";
int m =19;
cin>>p.first>>p.second; // 法一
p.first=str;
p.second=m; // 法二
p = make_pair("ghgfhgfh",m); // 法三
cout<<p.first<<p.second<<endl;
return 0;
}
4.比較運算
pair的六個比較運算符:<、>、<=、>=、==、!=,其規則是先比較first,first相等時再比較second,這符合大多數應用的邏輯。當然,也可以通過重載這幾個運算符來重新指定自己的比較邏輯。
三.應用舉例
1、讀程序
#include <bits/stdc++.h>
using namespace std;
int main() {
pair<string, int> pr1;
pair<string, int> pr2("heaven", 7);
cout << pr2.first << "=" << pr2.second << endl;
pair<string, int>* prp = new pair<string, int>("yards", 9);
cout << prp->first << "=" << prp->second << endl;
map<string, string> engGerDict;
engGerDict["shoe"] = "Schuh";
engGerDict["head"] = "Kopf";
map<string, string>::const_iterator it;
for (it=engGerDict.begin(); it != engGerDict.end(); ++it) {
cout << it->first << "=" << it->second << endl;
}
}
#include <bits/stdc++.h>
using namespace std;
typedef pair<string, string> au; //利用typedef簡化其聲明
int main()
{ int flag;
string x1,x2;
pair<string, string> p1("a","bc"); //創建一個pair對象,它的兩個元素分別爲string和string類型,其中first成員初始化爲“a”,而second成員初始化爲“ab”
au p2("a","aa");
au p3;
string name;
name=p1.second; //返回1中名爲second的數據成員
cout<<p1.first<<endl;
cout<<name<<endl;
flag=p1<p2;
cout<<flag<<endl; //判斷兩個pair對象的大小按字典次序
flag=p1>p2;
cout<<flag<<endl;
while(cin>>x1>>x2)
{ p3=make_pair(x1,x2); //生成一個新的pair對象
cout<<p3.first<<"****"<<p3.second<<endl;
}
return 0;
}
利用vector存儲piar類型,並通過sort對各pair類型數據的begin()排序,
最後藉助迭代器輸出pair類型數據的second().