Choose STL Container

容器特性概况

Overview of Container Abilities

一些常见标准

  • 一般用vector。因为内部结构最简单还提供随机存取。方便灵活快捷。
  • 如果经常在序列的首尾插入删除,用deque。如果有当元素删除时容器大小也相应缩小的需求,用deque。vector只用一块内存,deque用多块,所以能装的元素应该比vector多。
  • 如果经常在序列中间插入、删除、移动,用list。list为这些实现了特殊的成员函数。不过list不提供随机存取。这种基于节点的容器,只要元素还在容器中,指向其的迭代器就不会失效。
  • 如果需要操作安全的容器,用list(不调用赋值、sort,merge、remove、remove_if、unique),或者unordered/associative容器(不调用多元素insert,swap、erase)。
  • 如果经常需要按一定标准查找一个元素,用按这个标准hash的unordered set或unordered multiset。如果顺序相关的话,要用按这个标准排序的set或multiset。
  • 如果要处理key/value对,用unordered map或unordered multimap。如果顺序相关,就用map或multimap。
  • 如果需要关联序列,用unordered (multi)map。如果顺序相关用(multi)map。
  • 如果需要用字典,用unordered multimap。如果顺序相关用multimap。
  • 如果需要多项不兼容的特性,用多个不同类型容器存储相同元素。
  • 自动排序的关联容器并不意味着比需要排序时才手动排序的容器效率高。

[1] The C++ Standard Library 2nd Edition