vector,list,deque等容器统称序列式容器,里面储存的是元素本身。而关联式容器中储存的是<key,value> 的键值对,在数据检索时比序列式容器的效率更高
键值对是用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值,value代表与key对应的信息
C++中的STL实现了两种不同结构的关联式容器,树形结构和哈希结构。树形结构的关联式容器主要有四种,map,set,multimap,multiset
1.set是按照一定次序存储元素的容器
2.在set中,元素的value也标识它,value就是key,其类型为T,并且每个value是唯一的。set中的元素不能在容器中修改(容器总是const),但是可以在容器中插入和删除它们
3.set通过key访问单个元素的速度通常比unordered_set慢,但它允许根据顺序直接对子集进行迭代
4.在set中,总是按照其内部比较对象,所指定的特定弱排序准则进行排序
5.set在底层是用二叉搜索树(红黑树来实现的)
注意事项:
1.map/multimap中储存的是真正的<key,value>键值对,set中只放value,但在底层存放的实际是<value,value>键值对
2.set中插入元素时,只需要插入value即可,不需要构造键值对
3.set可以用于去重,set中的元素不能重复
4.使用set的迭代器遍历set中的元素,可以得到有序序列
5.set中的元素默认按照小于来比较
6.set中查找某个元素,时间复杂度为log2(N)
1.map是关联式容器,按照key来比较
2.在map中,key用来排序,和唯一标识元素,value中储存与key关联的内容,key与value的类型可能不同
3.在map中,通过键值访问单个元素的速度通常比unordered_map慢,但map允许根据顺序对元素直接进行迭代
4.map支持下标访问,即在[ ]中放入key,就可以找到与key对应的value
5.map由平衡二叉搜索树(红黑树)来实现
与set的区别是,multiset中的元素可以重复
与map的区别是,multimap中的key可以重复,multimap中没有重载operator[ ]