根据“数据在容器中的排列”特性,容器可概分为序列式(sequence)和关联式(associative)两种。
标准的STL关联式容器分为set
(集合)和map
(映射表)两大类,以及这两大类的衍生体multiset
(多键集合)和multimap
(多键映射表)。map
,multimap
,set
,multiset
四个关联容器的底层机制均以RB-tree(红黑树)完成。而C++11标准中,unordered_map
,unordered_multimap
,unordered_set
,unordered_multiset
四个关联容器的底层机制则以hash table(散列表)完成。
所谓关联式容器(associative containers),观念上类似关联式数据库:每个元素都有一个键值(key)和一个实值(value)。
set
的键值就是实值。map
的键值可以和实值分开,并形成一种映射关系,所以map
被称为映射表,或称为字典。