map

原理

map的底层是一棵红黑树,在对节点的插入或是删除操作中,通过旋转来保持平衡性,最坏情况下的插入、删除、查找时间是O(logn)。

通过map的迭代器不能修改其键值,只能修改其实值。所以map的迭代器既不是const也不是mutable。


map和multimap

map和multimap将key和value组成的pair作为元素,根据key的排序准则自动将元素排序,map中元素的key不允许重复,multimap可以重复。

map<key,value>

因为是排序的,所以map中元素的key不能被修改,只能删除后再添加。key对应的value可以修改。

向map中添加的元素的key类型必须重载<操作符用来排序。排序与set规则一致。


map和hash_map

区别:

   构造函数:hash_map需要hash function和等于函数,而map需要比较函数(大于或小于)。

   存储结构:hash_map以哈希表为底层,而map以红黑树为底层。 

   总的说来,hash_map查找速度比map快,而且查找速度基本和数据量大小无关,属于常数级别。而map的查找速度是logn级别。但不                     一定常数就比log小,而且hash_map还有hash function耗时。

适用场景:

             如果考虑效率,特别当元素达到一定数量级时,用hash_map。

             如果考虑内存,或者元素数量较少时,用map。


================================================================


附博客一篇:

     http://www.cnblogs.com/wangkangluo1/archive/2011/07/22/2114035.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

屠变恶龙之人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值