![252f3290ed1b29fd2023ab1b4c3d2d9f.png](https://i-blog.csdnimg.cn/blog_migrate/6bec304851f1615b185b44e68e03ede1.jpeg)
容器的分类
STL中一个比较宽泛的容器分类及其之间的关系如下图所示:
![b0b088796e3f2dcc72874c5e1bd65e31.png](https://i-blog.csdnimg.cn/blog_migrate/39ccc0c3f511a99aa54d70f132a7afcf.jpeg)
序列式容器(sequence container)
![180201d6d9edae4cfcc46fc47b664acc.png](https://i-blog.csdnimg.cn/blog_migrate/678ce66fca4d29c19ae1e11d67192987.jpeg)
序列化容器包括以下几种:
- array(数组)
- vector(向量)
- deque(双端队列)
- List(双向链表)
- forward list(单向链表)
stack、queue底层可以调用deque实现。
![ee94327013e54b02d112a7876cd65f6b.png](https://i-blog.csdnimg.cn/blog_migrate/8c8b2995e1ae958df5b918eabe60cd6c.jpeg)
![7c5f7426268a9e3dea5140e3c13c526b.png](https://i-blog.csdnimg.cn/blog_migrate/bdfa8b9d933894f01854240deb932d7e.jpeg)
![d9404d7e7d02d60dc43bd6f9e1790abe.png](https://i-blog.csdnimg.cn/blog_migrate/e067e6e8ee67a3c0fc11702379a2690f.jpeg)
关联式容器(associative container)
![032449180bb29370b6a373559c75837f.png](https://i-blog.csdnimg.cn/blog_migrate/92a9113ef6b0727df3a09c5e7bb5ee71.jpeg)
关联式容器主要指以下两种:
- set / Multiset
- map / Multimap
set、map基于红黑树(RBtree)的实现。
set中元素不能重复,Multiset中可以存储重复元素。
map中key不能重复,Multimap中可以重复。
Multimap中键值key与元素value的映照关系是多对多的关系,因此没有定义[]操作运算,而应使用c.insert()操作。
![23230fedec6f398ae9bd842f82b24deb.png](https://i-blog.csdnimg.cn/blog_migrate/f70b127221937b87df54b354a2c1dd4d.jpeg)
散列式容器(unordered container)
- unordered set / Multiset
- unordered map / Multimap
基于散列表(hash table)的实现。hash table散列之后,若出现冲突,一般使用链表串联起来。
hash table中每块用来散射的区域叫做bucket(篮子)。bucket中可以承载多个物体。
HashTable实际实现时,单个bucket中物体的数量不能超过bucket的数量,否则,扩充bucket。
![3dd9bda517067a091ec799770f206e94.png](https://i-blog.csdnimg.cn/blog_migrate/6db97f10313a4a94aff41e378fc0d85a.jpeg)
reference
- 侯捷《STL源码剖析》
更多精彩文章,欢迎关注公众号“Li的白日呓语”。