set和map通过一颗红黑树进行封装

文章讨论了在使用红黑树实现set和map时,如何处理泛型数据类型的比较问题,尤其是在插入和查找操作中涉及的关键字(K)模板参数。作者还解释了为何在迭代器实现中不使用`typename`,以及红黑树迭代器的非递归遍历方法。
摘要由CSDN通过智能技术生成

T是什么我不知道,但是我知道set 那么T一定得是key   ,  map一定得是pair的数据类型

得用一颗模板是红黑树,实例化出map和set

-------------------------------------------------------------------------------------------------------------------

目前来说,我们当前结构最大的困难点就是在比较上,我们的我们在这里要用_data来进行比较,而从泛型编程的角度来说,这里不能用data来进行比较

data对于set而言是key  ,   用key来比较而言没毛病

data对于map而言是pair  , 我们得用pair的first来比

但是这里我们不能取data的first来比,因为这里的data可能是key也可能是pair

--------------------------------------------------------------------------------------------------------------------------------

这里我们先解决一个疑惑!!!!!!!

原因是因为 , 我们的RBTree当中不仅仅有insert插入 (虽然insert插入 ,set比较的key   , map比较的pair当中的first 也就是key   )  ,还有find  ,那么我们find比较的也是key了,我们多传一个模板参数K ,可以利用模板K ,来进行key的比较,(虽然set对find没有影响,但是map当中find还是有影响的,不然需要取pair当中的first来进行比较,不太便利)

---------------------------------------------------------------------------------------------------------------------------

这样, 我们剩下代码当中比较的代码都可以变一变了

--------------------------------------------------------------------------------------------------------------------------------

红黑树迭代器的实现!!!

为什么不加typename,编译器不知道这里是一个类型还是一个变量呢??

因为这个类模板还没有实例化,所以编译器也不知道这里是一个类型!!

--------------------------------------------------------------------------------------------------------------------------------

红黑树是如何进行迭代器的++ 的,如何使用非递归的思路遍历这颗树

------------------------------------------------------------------------------------------------------------------------------

operator--()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值