老生常谈c++ MAP的内涵

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,很符合诶。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值