STL之map实现(一)

来源:互联网 发布:powerdvd源码输出 编辑:程序博客网 时间:2024/05/21 04:02
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。




0 0