天天看點

STL之map實作(一)

map其實就是一個映射,想象你在使用新華字典的時候,輸入一個單詞,就能得到這個單詞的意思,這樣就形成了一個映射。

為了實作map,你需要有類和對象,虛函數,模闆,pair類型基礎

首先,介紹一下模闆,看下面的函數(重複做同樣事情的函數,隻是類型不一樣) int sum(int a,int b) {   return a+b; }

float sum(float a,float b) {   return a+b; }

double sum(double a,double b) {  return a+b; }

函數體一樣,隻是類型不一樣,為了友善這類函數,引入把類型當做形參。 template <typename  T> T sum(T a,T b) { return a+b; } 這樣,不論你使用任何類型都可以調用。 //模闆調用 cout<<sum<int>(1,2)<<endl; cout<<sum<double(1.0,2.1)<<endl; cout<<sum<string>("魔域",“最好”)<<endl; 使用模闆,能友善你少寫很多代碼,好了 ,模闆暫時介紹到這裡,如果要深入學習模闆,你也可以看看我寫的關于模闆的文章。

其次,介紹一下pair類型 template <typename type1,typename type2> struct pair {   Type1 first;   Type2 secod; }

如果一個函數要傳回兩種不同的類型,比如傳回一個int類型,再傳回一個double類型,為了傳回兩種不同的類型,可以聲明一個結構體。 struct student {     int sum;    char *  name;    char    sex; }; 簡單的說,就是把不同的類型打包在一起,形成一個結構體。

為了說明鍵和值的關系,一個皇帝,後宮佳麗三千,皇帝就算key,後宮佳麗就是value. map---映射:一個x隻能對應一個y.,一個x鍵值隻有一個。

看下面的例子: map<int,string>  myMap; myMap[0]="休閑無心"; myMap[1]=''大好河山"; myMap[2]="木青子"; myMap[3]="紅顔禍水"; map<int,string>::iterator  Map_iter; for(Map_iter=myMap.begin();Map_iter!=myMap.end();Map_iter++) {     cout<<"key:"<<Map_iter.first<<"map:"<<Map_iter.secod<<endl;

} map有個自動排序,按照鍵值從小到大排序.接下來自己來實作map。

繼續閱讀