vector封装数组,list封装了链表, map和set封装了二叉树
vector 动态的连续数组高效存取,而不在乎插入和删除的效率,
array 静态的连续数组
list 双链表 需要大量的插入和删除,而不关心随即存取
set 唯一键的集合,按照键排序,key 与value相同,不允许相同的两个元素
map 键值对的集合,按照键排序,键是唯一的
set、map 键值为自定义类型时,必须重载< 即 bool operator <(const T&) const;
forward_list 单链表
multimap 键值对的集合,按照键排序
multiset 键的集合,按照键排序,键值不唯一
无序关联容器 : 无序(哈希)数据结构
unordered_set 唯一键的集合,按照键生成散列
unordered_map 键值对的集合,按照键生成散列,键是唯一的
类别 | 容器 | 插入后…… | 擦除后…… | 条件 | ||
---|---|---|---|---|---|---|
迭代器有效? | 引用有效? | 迭代器有效? | 引用有效? | |||
顺序容器 | array | N/A | N/A | |||
vector | 否 | N/A | 插入更改容量 | |||
是 | 是 | 在被修改元素前 | ||||
否 | 否 | 在被修改元素处或元素后 | ||||
deque | 否 | 是 | 是,除了被擦除元素 | 修改首元素或尾元素 | ||
否 | 否 | 只修改中间元素 | ||||
list | 是 | 是,除了被擦除元素 | ||||
forward_list | 是 | 是,除了被擦除元素 | ||||
关联容器 | set multiset map multimap | 是 | 是,除了被擦除元素 | |||
无序关联容器 | unordered_set unordered_multiset unordered_map unordered_multimap | 否 | 是 | N/A | 插入导致重哈希 | |
是 | 是,除了被擦除元素 | 无重哈希 |