关联容器可以分为很多种“两大类
1.set和map两大类:key和value是否相同。
2.是否为multi两大类:key能否重复。
3.是否为unordered的两大类:key有无固定的排序
1 复习
1.1 红黑树复习
见:
1.2 哈希表复习
见:
2 set
2.1 性质
对比红黑树,set有如下特性:
2.2 源码
根据源码的private部分,可见其数据就是一个红黑树类型的对象,迭代器特事故关于set的所有操作,其实都是调用了红黑树的操作。其中模板参数指定了一些默认类型,故使用时只需指定key的类型即可。
3 map
比set多了data,要求可以改data但不可以该key。
3.1 性质
对比红黑树和set,map有如下性质:
3.2 源码
分析同set,不同之处是类型为pair。
下面是一段特殊操作:map独有的下标操作,要传回来和key相对应的data,若key不存在,中括号会创建出这个key,放进map中来。
4 unordered
所谓unordered,就是没有固定的排序。
不定序容器分为unordered set、unordered map、unordered multiset、unordered multimap。
用哈希表操作的关联容器,在c++11之前称为hash容器,因为底部是由hash table支撑,和之前没有任何区别。关于hash的具体内容请见后一节。