跟着<<C++Primer 学Map容器>>

  Map容器,顾名思义,地图,是用来进行索引的一个容器。

在定义Map容器之前,c++首先定义了一个pair类型,这个类型有两个参数pair<T1,T2>。

  pair类型的对象通过点号(.)访问其成员(都是公有成员)first与second。  

  pair类型可以通过make_pair()函数来进行初始化。

下面定义map类型的对象

  map<string ,int> objmap;//这个语句定义了一个空的map对象,其中string类型的为索引,int类型的为其值。

对于自定义类型作为键类型,特别要注意的是自定义类型必须定义<这个操作符。并且必须是严格弱排序。也即两个键比较时,不能出现相互小于的情况。

  在map类型下面定义了三个类型。

  

map<K,V>::key_type   //在map容器中,作为索引的键的类型
map<K,V>::mapped //在map容器中,键所关联的值的类型
map<K,V>::value_type //他是个pair类型

我们需要注意的是map的迭代器类型解引用将产生一个pair类型的对象

map<K,V>::iterator map_it = mapobj.begin();

map_it->second;//这个便是访问pair类型的第二个值

给map中添加元素,有两种方法。

第一:

用下标访问元素时,如果map中已经存在了这个索引,则不做任何操作,但是如果索引中没有这个下标时,会将这个下标添加到索引中,并且将索引的值默认进行初始化。

1 mapobj["gaoteng"];

假如map中没有"gaoteng"这个索引的话,会将"gaoteng"加入到map中,同时将“gaoteng”所指示的值初始化。

需要强调的是:下标操作返回的是map<K,V>::mapped_type,而迭代器返回的是pair对象,这个特性与顺序容器不同。

第二:

用map对象的成员insert()函数来插入。

用这个函数特别要注意的是他的返回值类型。

在形参中是pair类型的insert版本,将返回一个值,这个值是pair对象,他包含一个指向插入元素的迭代器和一个bool类型的表示是否插入的变量。

如:

pari<map<K,V>::iterator,bool> ret = mapobj.insert(make_pair(k,v));

最后提供两个检查map元素的方法:

m.count(k)  //统计m中k出现的次数
m.find(k)//返回指向k索引的迭代器,如果没找到,返回超出末端的迭代器

从map中删除对象

与顺序容器不同的是,erase()成员函数返回void,而顺序容器则返回一个指向被删除元素的后一个迭代器。

与顺序容器一样,也可以通过 m.begin()与m.end()获取迭代器然后进行遍历,只不过遍历方式是按索引的升序排列的。


 

 

 

 

 

 

 

 

posted @ 2012-03-01 22:02  雪狼的程序故事  阅读(3469)  评论(0编辑  收藏  举报