vector
比如软件历史操作记录的存储,我们经常要查看历史纪录,比如上一次的记录,上上次的记录。
相当于无限尾插,几乎不头插。vector的头插以及删除代价非常大。
deque
比如排队购票系统,对排队者的存储可以采用deque,支持头端的快速移除,尾端的快速添加。
如果采用的是vector,则头端删除时,会移动大量的数据,速度慢。
list
比如公交车乘客的存储,随时可能有乘客下v很,支持频繁的不确实位置原始的删除和插入。
set/multiset
比如对手机游戏的个人得分记录的存储,存储要求从高分到低分地顺序排列。
map/multimap
比如ID号存储十万个用户,想要快速通过ID查找对应的用户。二叉树的查找效率,这事就体现出来了。如果是vector容器,最坏的情况下可能要遍历完整个容器才能找到该用户。
小结
在实际使用过程中,到底选择这几种容器中的哪一个,应该根据遵循以下原则:
1、如果需要高效的随机存取,不在乎插入和删除的效率,使用vector;
2、如果需要大量的插入和删除元素,不关心随机存取的效率,使用list;
3、如果需要随机存取,并且关心两端数据的插入和删除效率,使用deque;
4、如果打算存储数据字典,并且要求方便地根据key找到value,一对一的情况使用map,一对多的情况使用multimap;
5、如果打算查找一个元素是否存在于某集合中,唯一存在的情况使用set,不唯一存在的情况使用multiset。