STL之map實現(一)
阿新 • • 發佈:2019-01-26
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。
} map有個自動排序,按照鍵值從小到大排序.接下來自己來實現map。