C++标准库提供各种具有特色的不同容器。问题是,鉴于不同容器的底层实现不同,各容器都有自己的特点,该如何选择最佳的容器类型?
1.默认情况下选择 vector 是足够用的,Vector 的内部结构最简单,并允许随机访问,所以数据的访问十分方便灵活,数据的处理也也够快。
2.如需经常在头尾部插入删除元素,应该采用 deque;如需在元素被删除时能自动缩减内存空间,也该旋转 deque。
3.如需要在容器中段对元素插入删除移动等操作,使用 list 较好。List提供了特殊的成员函数,可常量时间内将元素在不同容器中转移。但 List 不支持随机访问。
4.如需经常根据某个准则查找元素,应考虑使用 unordered_set/multiset,如要求元素有序,则选择 set/mulitiset。
5.如果是key/value类型的元素,采用unordered_map/multimap,如需次序,则选择map/multimap。
6.如需关联式数组,应选择 unordered_map 或者map。
7.如需字典结构,应选择 unordered_multimap,或者multimap。
以下是STL容器能力一览表:
以上内容参考C++标准库一书。