C++_泛型编程与标准库(十)——set与map
参考:《侯捷泛化编程与标准库》、GNU9.3.0,vs2019
图中标红部分为自己的笔记理解
SET
GNU 9.3.0的set部分代码如下,图中可以看到_Rb_tree重定义为_Rep_type,由_Rep_type再定义一个红黑树,其中key和value一样
vc2019的set部分代码如下,进一步观察_Tree可以看到,vc2019少了一个模板参数,而实现方法就在_Tree的模板参数也是一个泛型模板,在_Tset_traits中实现key就是value
二者对比可以发现,GNU的是复合关系,set里包含了一棵红黑树,VC2019是继承is-a的关系,set就是一颗红黑树
MAP
GNU 9.3.0的map部分代码如下,图中可以看到_Rb_tree重定义为_Rep_type,由_Rep_type再定义一个红黑树,其中value是pair类型,用const关键字实现了key不可修改
vc2019的map部分代码如下,进一步观察_Tree可以看到,vc2019少了一个模板参数,而实现方法就在_Tree的模板参数也是一个泛型模板,在_Tmap_traits中实现value是pair类型,用const关键字实现了key不可修改
二者对比可以发现,GNU的是复合关系,map里包含了一棵红黑树,VC2019是继承is-a的关系,map就是一颗红黑树
lower_bound()返回更适合插入元素地方的迭代器,map本身的lower_bound()