map的简单使用这里不再多做描述。
这里主要和大家分享下map的内在的一些东西。
说到map大家肯定会想起iterator,两者相辅相成。
1、先说说map的优势
通过key可以快速查找到value,value可以是任何值,这个特性非常适合用来保存数据,并且进行查找。
所以在操作数据保存中经常会使用到map。
2、说说迭代器模式
设计模式的顶顶大名大家应该都听说过,但是想要正真理解并能够运用它,没有大量的实践是不可能的。map就提供一种去深入理解迭代器模式的途径。
3、map的实现
对于用来保存数据的工具map来说,我们关心保存在map中的数据是怎么保存的。
举个例子说明:a[1] = b;
上述其实发生了两个动作,首先找到key为1的value,如果值不存在,malloc默认值。再把赋值给value。
所以map中的值都动态保存的,这也是为什么map对象都直接保存为对象并在程序中随便用。如果说map不是通过动态申请的话,那就太可怕了。使用map,一不小心就栈溢出了。
map通过红黑树进行保存,查找、添加、删除的效率都为O(logn),相当高,完全不担心记录过多的问题。
注意:这里提醒大家一个陷阱:a[0],对于map对象,很多人喜欢用下标去访问,因为方便,但是这个操作存在一个隐患,到key数据不存在时,map会先添加一个默认数据到map中,再返回那个默认的值,如果key的值非常多且不一样,则会导致内存泄露。
4、迭代器的意义
map数据的保存操作都相当完整了,为什么还要分离出其数据操作功能呢。
先看看迭代器模式的解释:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示
对照map,很符合诶。