1. 程式人生 > >STL之map實現(一)

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; }; 簡單的說,就是把不同的型別打包在一起,形成一個結構體。 /**    first: 鍵:key    second :值:value */ 為了說明鍵和值的關係,一個皇帝,後宮佳麗三千,皇帝就算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。