STL笔记:rb_tree
一. 基本介绍
- rb_tree提供遍历操作,也就是中序遍历,和迭代器iterators;
- 按正常规则++ite执行遍历,便能得到排序状态;
- 我们不应该使用(然是编程层面并未阻止此事)rb_tree的iterators改变元素值,因为元素有其严谨的排列规则;
- 这样设计是正确的,因为rb_tree为set和map提供底层支持,而map允许改变元素的data值,只有元素的key才是不可改变的。
- 在map中,元素排列是基于其key的;
- rb_tree提供俩种insertion操作:insert_unique()和insert_equal();
- insert_unique()方式中,结点的key一定在整个tree中独一无二;
- insert_equal()方式中,结点的key可以重复。
二.标准库对rb_tree的实现:
说明:
- compare暂时就理解成一个仿函数
- header是为了实现方便所放的空结点,没有具体含义
- value是key|data的数据包(这个暂时不理解,可以想象成一个结构体,里面有多个数据)
- keyofvalue是从value中提取出key,使用的是下图中的identity,需要注意的是并不是所有库的C++标准库都有identity,比如VC6,这是需要它自己写一个,具体见下一个笔记
- Alloc是一个内存分配器,注意这里用的既不是New也不是malloc;
三、原理链接
- 红黑树详细stl实现
https://blog.csdn.net/qq_38790716/article/details/84575105?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
STL笔记:rb_tree相关推荐
- STL笔记(5)条款49:学习破解有关STL的编译器诊断信息
STL笔记(5)条款49:学习破解有关STL的编译器诊断信息 条款49:学习破解有关STL的编译器诊断信息 用一个特定的大小定义一个vector是完全合法的, vector<int> v( ...
- STL笔记(4)关于erase,remove
STL笔记(4)关于erase,remove 你要erase的元素很容易识别.它们是从区间的"新逻辑终点"开始持续到区间真的终点的原来区间的元素.要除去那些元素,你要做的所有事情就 ...
- C++STL笔记(九):map和multimap详解
--一个华科大差生的12年程序员工作总结 相关博文:<Essential C++>笔记之关联容器map的使用总结 相关博文:C++<STL和泛型编程>容器不带/带有成员函数总结 ...
- C++STL笔记(一):STL综述
例1 附例1代码: //小问学编程 #include<iostream> #include<vector> #include<algorithm> #include ...
- SGI STL的rb_tree浅析
rb_tree是一种特殊的平衡二叉搜索树,但是其对平衡的要求比avl_tree低,avl_tree要求左右子树的高度差不能大于1,而rb_tree只要求从一个节点至树的尾端的任何路径的黑节点的个数相等 ...
- 【STL】rb_tree (multi)set (multi)map
rb_tree rb_tree源码实现 G2.9版本的rb_tree源码 rb_tree底层实现红黑树,其示意图和代码如下: 4个需要注意的模板参数:Key,Value,KeyOfValue,Comp ...
- STL笔记(二)---空间配置器
一.概述 allocator是STL的六大组件之一,空间配置器.其作用就是为各个容器管理内存(内存开辟 内存回收).allocator配置的对象不只是内存,它也可以向硬盘索取空间.使用STL库的时候不 ...
- C++标准模板库(STL)笔记与示例
C++标准模板库知识点: /*一.主要内容: sort //必会! next_permutation() //记住怎么调用 list // stack //调用类库 queue //调用类库 vect ...
- C++STL笔记(十一):priority queue(带优先级的队列)详解
priority queue结构 核心接口 例: 附代码: #include<iostream> #include<queue> using namespace std;int ...
最新文章
- 解决[[NSFileManager defaultManager] contentsOfDirectoryAtPath 方法获取不到数据的bug
- iOS原生地图与高德地图的使用
- 106. 动态中位数【经典 / 对顶堆】
- 从“不务正业”到“回归本行”,“中年”雅戈尔的偶然与必然
- ironpython使用opencv_连这些都不知道,就别说自己懂Python!
- jQuery 的原型关系图
- 牛客练习赛 56 E tarjan 割边
- 通过SSH连接远程Jupyter Notebook
- 人生苦短 须用Kotlin
- 如何新建一个vue项目(图文详解)
- 幅值与峰峰值的计算_峰峰值,峰值,平均值,有效值的关系
- 热血江湖Java_热血江湖源码+教程
- 计算机网络实习个人总结,(实习报告)计算机网络实训个人小结
- GHO文件内IE主页的修改方法
- Android换肤功能实现与换肤框架QSkinLoader使用方式介绍
- 如果要用运营的姿势,发支付宝红包
- 聚合API文档阅读帮助
- 艾永亮:颠覆传统行业,打造超级产品,了解并响应用户需求是关键
- Java 中continue基础用法
- python采集银行信息_Python:将银行扣费信息整理成账单
热门文章
- java中singleton_java中singleton的几种实现方式
- python获取当前进程pid_Python获取系统所有进程PID及进程名称的方法示例
- 什么叫工业4.0,这篇接地气的文章终于讲懂了
- ABAP:BTE的查找及使用
- java的可执行文件_java生成可执行文件的方法总结
- 网络安全行业有哪些认可度比较高的证书呢?
- 解一元二次方程lisp_lisp语言编写lisp程序解二元一次方程组和一元二次方程组应该怎么做​...
- 《数据结构》实验报告四:串的模式匹配(BF算法、KMP算法)
- css实现网页对联广告
- 交叉销售功能介绍-功能