set
:- 存储唯一键值的集合,即不允许重复的元素。
- 元素本身就是键值。
- 元素按照特定顺序存储(默认为递增顺序)。
multiset
:- 类似于
set
,但它允许重复的键值,即可以有多个相等的元素。 - 元素同样按照特定顺序存储。
- 类似于
map
:- 存储键值对(pair),每个键值对由一个键和一个值组成。
- 每个键在
map
中是唯一的,你不能有两个具有相同键的键值对。 - 键值对按照键的顺序存储。
multimap
:- 类似于
map
,但它允许键不唯一,即可以有多个键值对拥有相同的键。 - 键值对同样按照键的顺序存储。
- 类似于
使用情况概述:
- 当你需要存储不重复元素的有序集合时,使用
set
。 - 当你需要存储可能重复元素的有序集合时,使用
multiset
。 - 当你需要维护一组键到值的映射,并且每个键只能关联一个值时,使用
map
。 - 当你需要维护一组键到值的映射,并且一个键可以关联多个值时,使用
multimap
。
所有这四种类型的底层实现通常是红黑树,除了提供插入、删除和搜索操作外,还保证了元素的有序性。然而,如果你不需要元素的排序,并且关注更高效的插入和查找性能,可以选择使用基于哈希表实现的 unordered_set
, unordered_multiset
, unordered_map
, unordered_multimap
等无序容器。