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

来源:互联网 发布:七龙珠超漫画软件 编辑:程序博客网 时间:2024/05/07 22:44

总结: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个方面来权衡:查找速度,数据量, 内存使用,还有一个就是你的经验!没有特别的标准

0 0