C++ STL 体系结构与内核分析 P20-P15(红黑树 set multiset map multimap)

C++ STL 体系结构与内核分析 P8-P15

容器rb-tree(红黑树)

红黑树是平衡二叉搜索树,其中序遍历的顺序相同于按节点元素大小(此处相当于map容器中的key)顺序遍历
不应该使用rb_tree的iterator改变元素值(此处相当于map容器中的key)
rb_tree提供;两种insertion操作:insert_unique()和insert_equal(),前者表示插入结点的key不重复,后者表示可以重复
对于节点,key+data=value

rb_tree需要五个模板参数:
Key:关键字的值类型
Value:key+data=value
Keyofvalue:如何从value获得key
Compare:如何比较key值的大小,是一个function
Alloc:alloc分配器

红黑树只占24个字节(64位下),因为只含三个数据:
size_type node_count;自我的结点数量
link_type header:根结点指针
Compare key_compare:结点比较准则,为一个函数对象

set,multiset

set:元素的key不可以重复,insert()使用rb_tree的insert_uniqe()
multiset:元素的key可以重复
1.无法使用iterator来改变set和multiset的元素,其源码中的itetator为const类型

2.set的key就是value,使用identity()函数

map,multimap

1.无法使用iterator改变map/multimap的key,key为const类型,但可以改变data

2.map中用select1st来实现红黑树的关键字查找功能,select1重载()符号返回一个pair类的first值,pari类就相当于红黑树的一个结点,对于红黑树来说first返回结点的key值
multiset使用示例

maultimap<long,string>c;
c.insert(pair<long,string>(i,buf))//将i和buf包装为一个<long,string>类型的pair,然后插入

3.特别的,map可以使用[ ]根据key索引data,低层实现为二分查找

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值