map/multimap深度探索

map/multimap同样以rb_tree为底层结构,同样有元素自动排序的特性,排序的依据为key。

我们无法通过迭代器来更改map/multimap的key值,这个并不是因为rb_tree不允许,而是map/multimap在定义自己数据类型的时候通过使用const来将key值修饰。

 

 map有四个模板参数,其中Campare和Alloc的默认参数与set相同,均为less和alloc,从下图绿框可以看到,map使用pair从而将key与data捆绑成为自己的value_type,同时用const将自己的key值进行修饰。

 

 

 map和multimap在插入时有所不同,在刚开始学习时,multimap是通过insert函数将自己的key和value进行插入(第53行代码可见),而map是通过[]来进行赋值(代码第53行),我们已经知道,map底层是由rb_tree来实现,所以用[]进行赋值肯定不是像数组一样寻址赋值,这里的[]是对符号进行重载。

 

 翻译蓝色的注释:返回与下标中指定的键相关联的数据。如果键不存在,则使用默认值创建与该键对,然后返回。

即,当发现key存在时,返回与key相关的data,否则在最合适位置为key创建并返回指向该key的迭代器。

 

posted @ 2020-02-20 14:32  C_hp  阅读(219)  评论(0编辑  收藏  举报