c++ list, vector, map, set 区别与用法比较

总结:Vector,List,Set都只有键值(key)。

Vector对于随机访问的速度很快,但是对于插入尤其是在头部插入元素速度很慢,在尾部插入速度很快(push_back)。

List封装了链表,List对于随机访问速度慢得多,因为可能要遍历整个链表才能做到,但是对于插入就快的多了,不需要拷贝和移动数据,只需要改变指针的指向就可以了。

Set使用了非常高效的平衡检索二叉树:红黑树。特点1)键值按从小到大排序。2)检索,插入,删除比较快3)集合内没有重复的键值。但是,构造set集合主要目的是为了快速检索,不可直接去修改键值。

Map,Set属于标准关联容器,使用了非常高效的平衡检索二叉树:红黑树,

Map:原型 map<Key, Data, Compare, Alloc> 。特点1)键值按从小到大排序。2)检索,插入,删除比较快3)集合内没有重复的键值。

hash_map:特点1)键值不排序。2)集合内没有重复的键值。

总 体来说,hash_map 查找速度会比map快,而且查找速度基本和数据量大小无关,属于常数级别;而map的查找速度是log(n)级别。hash还有hash函数的耗时。当有100w条记录的时候,map也只需要20次的比较,200w也只需要21次的比较!所以并不一定常数就比log(n) 小!

    hash_map对空间的要求要比map高很多,所以是以空间换时间的方法,而且,hash_map如果hash函数和hash因子选择不好的话,也许不会达到你要的效果,所以至于用map,还是hash_map,从3个方面来权衡:查找速度,数据量, 内存使用,还有一个就是你的经验!没有特别的标准

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值