本文共 2866 字,大约阅读时间需要 9 分钟。
1。目录
2。map简介
map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key。
3。map的功能
4。使用map
使用map得包含map类所在的头文件
#include <map> //注意,STL头文件没有扩展名.hmap对象是模板类,需要关键字和存储对象两个模板参数:
std:map<int, string> personnel; 这样就定义了一个用int作为索引,并拥有相关联的指向string的指针.为了使用方便,可以对模板类进行一下类型定义,
typedef map<int,CString> UDT_MAP_INT_CSTRING;
UDT_MAP_INT_CSTRING enumMap;5。在map中插入元素
改变map中的条目非常简单,因为map类已经对[]操作符进行了重载
enumMap[1] = "One";
enumMap[2] = "Two"; .....这样非常直观,但存在一个性能的问题。插入2时,先在enumMap中查找主键为2的项,没发现,然后将一个新的对象插入enumMap,键是2,值是一个空字符串,插入完成后,将字符串赋为"Two";该方法会将每个值都赋为缺省值,然后再赋为显示的值,如果元素是类对象,则开销比较大。我们可以用以下方法来避免开销:
enumMap.insert(map<int,CString> :: value_type(2, "Two"))
6。查找并获取map中的元素
下标操作符给出了获得一个值的最简单方法:
CString tmp = enumMap[2];
但是,只有当map中有这个键的实例时才对,否则会自动插入一个实例,值为初始化值。
我们可以使用Find()和Count()方法来发现一个键是否存在。
查找map中是否包含某个关键字条目用find()方法,传入的参数是要查找的key,在这里需要提到的是begin()和end()两个成员,分别代表map对象中第一个条目和最后一个条目,这两个数据的类型是iterator.
int nFindKey =2;
通过map对象的方法获取的iterator数据类型是一个std::pair对象,包括两个数据iterator->first 和 iterator->second分别代表关键字和存储的数据
7。从map中删除元素
移除某个map中某个条目用erase()
该成员方法的定义如下
clear()就相当于enumMap.erase(enumMap.begin(), enumMap.end());
void main()
{//简单的一个列子,其使用方法和map是一样的。 hash_map<int,string> hmap;//定义一个实例 hmap.insert(pair<int,string>(10,"sfsfd"));//插入一个pair对象,hmap.insert(hash_map<int,string>::value_type(34,"sddsf"));//value_type就是pair类型的
hmap[23] = "23"; hmap[33] = "33"; hmap[-1] = "-1"; hash_map<int,string>::iterator it =hmap.begin(); while(it!=hmap.end())//遍历从上面的列子可以看到,使用起来是没什么困难的,很方便。但是我们什么时候要用map,什么时候用hash_map呢?
map与hash_map
另外可以通过重写hash_compair仿函数,更改里面关于桶数量的定义,如果取值合适,也可以得到更优的性能。而且如果你的数据是自定义的类型,必须要重写这个仿函数。可以模仿原来的写法,所有的成员函数,成员变量一个不能少!
转自与 :http://blog.sina.com.cn/s/blog_4ac0a0d30100ukpp.html
转载地址:http://hstii.baihongyu.com/