RB-Tree

news2024/9/19 10:48:25

RB-tree

平衡二叉搜索树
元素排列规则有利于search 和 insert

red-black tree(红黑树)是平衡二元搜索树(balanced binary tree)。其特征:排列规则有利于Search和Insert,并保持适度平衡—无任何节点过深。rb_tree提供两种插入操作:inset_unique和insert_equal。前者需要key在树是独一无二的(multimap/set不适用),后者key可以重复存在。

RB-tree

红黑树:value = key + data
class KeyOfValue: 怎么从value种取出key
Compare:Compare(比较key的大小的方法)

template<class Key,class Value,class KeyOfValue,class Compare,class Alloc=alloc>
class rb_tree
{
protected:
	typedef __rb_tree_node<Value> rb_tree_node;
public:
	typedef rb_tree_node* link_type;
protected:
	size_type node_count;	//rb_tree的节点数量
    link_type header;		//头节点
    Compare Key_compare;	//Key排序方式
};

rb_tree在使用中需要你提供4个参数:Key、Value、KeyofValue(提取Key的方法)、Compare(比较key的大小的方法)。

template <class T>
struct identity:public unary_function<T,T>{
    const T& operator()(const T& ref)const
    {
        return ref;
	}
}

template <class T>
struct less:public binary_function<T,T,bool>{
    bool operator()(const T&x,const T&y){
        return x<y;
    }
}

void RbTreeTest(){
    _Rb_tree<int,int,identity<int>,less<int>> tree;
    cout << itree.empty() << endl;  //1
	cout << itree.size() << endl;   //0

	itree._M_insert_unique(3);
	itree._M_insert_unique(8);
	itree._M_insert_unique(5);
	itree._M_insert_unique(9);
	itree._M_insert_unique(13);
	itree._M_insert_unique(5);  //no effect, since using insert_unique().
	cout << itree.empty() << endl;  //0
	cout << itree.size() << endl;   //5
	cout << itree.count(5) << endl; //1

	itree._M_insert_equal(5);
	itree._M_insert_equal(5);
	cout << itree.size() << endl;   //7, since using insert_equal().
	cout << itree.count(5) << endl; //3    
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1617650.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Rest微服务案例

Rest 父工程构建microservicecloud-api公共子模块Modulemicroservicecloud-provider-dept-8001部门微服务提供者Modulemicroservicecloud-consumer-dept-80部门微服务消费者Module 以Dept部门模块做一个微服务通用案例 Consumer消费者&#xff08;Client&#xff09;通过REST调…

HF区块链链码基础

链码生命周期 一 . 链码准备 准备文件 . 在测试目录下创建chaincode,拷贝测试链码进 chaincode目录,拷贝 set-env.sh 脚本进 scripts 目录 二. 打包链码 打包测试链码 export FABRIC_CFG_PATH${PWD}/config peer lifecycle chaincode package ./chaincode/chaincode_basic.…

什么是信息熵?

什么是信息&#xff1f; ​ 我们在日常生活中吃瓜的时候总会说信息量太大了&#xff0c;那么这个信息是怎么个意思呢&#xff1f;我们在听到的时候很多原因都是因为这个消息是新鲜的&#xff0c;我们没见过的&#xff0c;没听说过&#xff0c;所以就说是信息量大。 信息熵 2…

重学java 22.面向对象 继承、抽象综合案例

我们纵横交错&#xff0c;最后回到原点 —— 24.4.23 综合案例 流程思维图 代码实现 方式1 利用set方法为属性赋值 父类&#xff1a; public abstract class Development extends Employee{}子类1&#xff1a; public class JavaEE extends Development{Overridepublic void w…

【软考高项】二十四、整合管理基础内容

一、概述内容 定义 项目整合管理包括识别、定义、组合、统一和协调项目管理过程组的各个过程和项目管理活动&#xff0c;项目整合管理贯穿项目始终。目标 ①资源分配;②平衡竞争性需求;③研究各种备选方法;④裁剪过程以实现项目目标;⑤管理各个项目管理知识领域之间的…

前端性能分析工具及使用

Lighthouse Lighthouse &#xff08;谷歌浏览器的插件商店中搜索并安装&#xff0c;浏览器中点击F12&#xff0c;开发者工具中可使用&#xff09;是 Google 开发的一款工具&#xff0c;用于分析网络应用和网页&#xff0c;收集现代性能指标并提供对开发人员最佳实践的意见。只要…

node.js版本降级/升级

第一步.先清空本地安装的node.js版本 按健winR弹出窗口&#xff0c;键盘输入cmd,然后敲回车&#xff08;或者鼠标直接点击电脑桌面最左下角的win窗口图标弹出&#xff0c;输入cmd再点击回车键&#xff09; 进入命令控制行窗口&#xff0c;输入where node&#xff0c;查看本地…

关于YOLO模型架构中的strides

在Ultralytics YOLO模型架构中&#xff0c;m.stride是一个非常关键的属性&#xff0c;用于描述网络在不同尺度&#xff08;scale&#xff09;上的空间压缩程度。解释m.stride的原理之前&#xff0c;我们首先要了解深度学习中卷积神经网络&#xff08;CNN&#xff09;的基本工作…

png图片如何缩小体积?这个方法效果不错

图片压缩是我们生活中经常都会遇到的问题。在日常工作中图片体积过大的话&#xff0c;在使用过程中就会收到影响&#xff0c;比如加载过慢等。那么&#xff0c;当我们想要对png图片进行压缩处理的时候&#xff0c;要怎么操作呢&#xff1f;很简单&#xff0c;使用图片在线压缩&…

【sping】在logback-spring.xml 获取项目名称

在日志文件中我们想根据spring.application.name 创建出的文件夹。 也不想死在XML文件中。 application.yml spring:application:name: my-demo logback-spring.xml <springProperty name"application_name" scope"context" source"spring.app…

如何用微信小程序实现远程控制无人售货柜

如何用微信小程序实现远程控制无人售货柜呢&#xff1f; 本文描述了使用微信小程序调用HTTP接口&#xff0c;实现控制无人售货柜&#xff0c;独立控制售货柜、格子柜的柜门。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称厂商1智能WiFi…

数值分析复习:Richardson外推和Romberg算法

文章目录 Richardson外推Romberg&#xff08;龙贝格&#xff09;算法 本篇文章适合个人复习翻阅&#xff0c;不建议新手入门使用 本专栏&#xff1a;数值分析复习 的前置知识主要有&#xff1a;数学分析、高等代数、泛函分析 本节继续考虑数值积分问题 Richardson外推 命题&a…

网络爬虫快速入门及爬取百度搜索结果(附源码)

前言 爬虫的基本结构及工作流程 1. 确定目标 首先&#xff0c;确定你想要爬取的目标&#xff0c;包括目标网站或网页、需要提取的数据类型&#xff08;如文本、图片、视频等&#xff09;以及爬取的深度&#xff08;单页、整个网站等&#xff09;。 2. 获取网页内容 使用HT…

为智算产业高质量发展探寻路径,又一重要生态合作启动

4月22日&#xff0c;由中国工业经济联合会主办的“2024中国工业经济高峰论坛智能算力产业高质量发展论坛”落幕。院士专家、研究机构、以及来自智能算力产业上下游企业代表近180人出席&#xff0c;围绕完善算力基础设施、深化算力赋能行业应用、推动区域数字化发展等热点议题展…

【MySQL 数据宝典】【磁盘结构】- 005 Undo log 撤销日志

一、基本介绍 ​ 每当我们要对一条记录做改动时&#xff08;这里的改动可以指 INSERT 、 DELETE 、 UPDATE &#xff09;&#xff0c;都需要留一手 -> 把回滚时所需的东西都给记下来 ​ 你插入一条记录时&#xff0c;至少要把这条记录的主键值记下来&#xff0c;之后回滚的…

大数据技术应用实训室解决方案

一、大数据课程体系 1.1 大数据实验实训课程体系设计依据 大数据实验实训课程体系的设计依据主要围绕培养目标、培养方案和课程体系建设三个方面来展开。 1、培养目标 大数据实验实训课程的设计旨在培养具备大数据理论知识和实践技能的专业人才。具体而言&#xff0c;这些人才…

刷课必备!用Python实现网上自动做题

前言 开学少不了老师会布置一些 软件上面的作业&#xff0c;今天教大家用python制作自动答题脚本&#xff0c;100%准确率哦喜欢的同学记得关注、收藏哦 环境使用 Python3.8Pycharm 模块使用 import requests —> 数据请求模块 pip install requestsimport parsel —>…

TypeError: FormatCode() got an unexpected keyword argument ‘verify‘

背景 使用mmdet3d调试项目&#xff0c;提示下面的错误 笔者使用的mmcv版本为mmcv-full1.4.0 原因分析 从截图中可以看出错误出现在/usr/local/lib/python3.8/dist-packages/mmcv/utils/config.py的第496行&#xff1a;text, _ FormatCode(text, style_configyapf_style, v…

环回光模块

&#x1f44f;&#x1f4cd;环回光模块&#xff08;Lookback&#xff09;&#xff0c;也称为光模块自环测试回路器&#xff0c;用于测试系统或网络中的信号回传。通过回传信号&#xff08;主要是成对连接发射端到接收端的一侧&#xff09;&#xff0c;可以检测网络链路中各种潜…

java网络编程 BufferedReader的readLine方法读不到数据且一直阻塞

最近在整理Java IO相关内容&#xff0c;会遇到一些以前没有注意的问题&#xff0c;特此记录&#xff0c;以供自查和交流。 需求&#xff1a; 基于Java的BIO API&#xff0c;实现简单的客户端和服务端通信模型&#xff0c;客户端使用BufferedReader的readLine方法读取System.i…