STL詳解(八) 對組容器pair

一.解釋:

  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().

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章