c++ pb_ds库,实现 红黑树,Splay

C++ pb_ds库

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace __gnu_pbds;

定义一颗红黑树

tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>t;

int 关键字类型

null_type无映射(低版本g++为null_mapped_type)

less<int>从小到大排序

rb_tree_tag 红黑树(splay_tree_tag)

tree_order_statistics_node_update结点更新

插入t.insert();

删除t.erase();

Rank:t.order_of_key();

第K值:t.find_by_order();

前驱:t.lower_bound();

后继t.upper_bound();

其他的注意一些细节问题就行,

比如说不支持相同关键字的插入可以用double代替int插入啥的或者再插入一个时间戳啥的

时间: 2024-11-05 20:36:38

c++ pb_ds库,实现 红黑树,Splay的相关文章

二叉搜索树—RBTree(红黑树)

  红黑树又称二叉搜索树,它主要是通过红和黑两种颜色(red.black)来标识节点.通过对任何一条从根节点到叶子节点路径上的节点颜色进行约束,红黑树保证最长路径不超过最短路径的两倍,所以说:红黑树是近似于平衡的. ■下面是红黑树的主要特点: (1)红黑树的根节点是黑色的. (2)红黑树中若一个节点是红色的,则它的两个子节点必须是黑色的. (3)红黑树中从该节点到后代叶节点的路径上,黑色节点数目是相同的.        ◆红黑树的应用: C++库.linux内核.java库等        ◆红

查找(一)史上最简单清晰的红黑树解说

查找(一) 我们使用符号表这个词来描写叙述一张抽象的表格.我们会将信息(值)存储在当中,然后依照指定的键来搜索并获取这些信息.键和值的详细意义取决于不同的应用. 符号表中可能会保存非常多键和非常多信息,因此实现一张高效的符号表也是一项非常有挑战性的任务. 我们会用三种经典的数据类型来实现高效的符号表:二叉查找数.红黑树.散列表. 二分查找 我们使用有序数组存储键,经典的二分查找可以依据数组的索引大大降低每次查找所需的比較次数. 在查找时,我们先将被查找的键和子数组的中间键比較.假设被查找的键小于

数据结构(三):非线性逻辑结构-特殊的二叉树结构:堆、哈夫曼树、二叉搜索树、平衡二叉搜索树、红黑树、线索二叉树

在上一篇数据结构的博文<数据结构(三):非线性逻辑结构-二叉树>中已经对二叉树的概念.遍历等基本的概念和操作进行了介绍.本篇博文主要介绍几个特殊的二叉树,堆.哈夫曼树.二叉搜索树.平衡二叉搜索树.红黑树.线索二叉树,它们在解决实际问题中有着非常重要的应用.本文主要从概念和一些基本操作上进行分类和总结. 一.概念总揽 (1) 堆 堆(heap order)是一种特殊的表,如果将它看做是一颗完全二叉树的层次序列,那么它具有如下的性质:每个节点的值都不大于其孩子的值,或每个节点的值都不小于其孩子的值

红黑树设计思想之我见

具体算法可见[红黑树 - 维基百科,自由的百科全书](http://zh.wikipedia.org/zh/%E7%BA%A2%E9%BB%91%E6%A0%91) 最总完成代码见[algorithm/RBTree.h at master · liu946/algorithm](https://github.com/liu946/algorithm/blob/master/RBTree.h) ## 前言 说实话,我一星期前就开始着手写这次的数据结构作业了,AVL倒是容易,这个以前是理解的,在写这

红黑树和哈希表的对比

什么是Hash Hash,也可以称为"散列",就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值.这是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出(也就是多对一的关系). 哈希表的构造 在所有的线性数据结构中,数组的定位速度最快,因为它可通过数组下标直接定位到相应的数组空间,就不需要一个个查找.而哈希表就是利用数组这个能够快速定位数据的结构解决以上的问题的. "数组可以通过下标直接定位到相应的空间"

算法导论第十三章 红黑树

写在前面:这一章真的把我害惨了,之前至少尝试看过3遍,每次看之前都下定决定一定要把它拿下,可是由于内容较多,深度够深,以致于每次要不是中途有什么事放弃了就跳过了,要不是花时间太多仍然不能理解而放弃.这次总算挺过来了,前后零零散散的时间加起来差不多也有两天时间.这次能坚持下来并攻克,我想大概有这么几个原因吧:第一是之前下定的决心要写一个最新版<算法导论>的读书笔记,之前几章都坚持写了,不能让这个成为拦路虎,即使再难再花时间都要弄懂:第二是通过前面几章的动手实践,发现自己的理解能力.动手能力都进步

红黑树(附完整C代码)

版权声明:原创不易,转载请注明转自weewqrer 红黑树 红黑树简介 首先红黑树是一棵二叉搜索树,它在每个结点上增加了一个存储位来表示结点的颜色,可以是RED或者BLACK.通过对一条从根节点到NIL叶节点(指空结点或者下面说的哨兵)的简单路径上各个结点在颜色进行约束,红黑树确保没有一条路径会比其他路径长出2倍,因而是近似平衡的. 用途 红黑树和AVL树一样都对插入时间.删除时间和查找时间提供了最好可能的最坏情况担保.对于查找.插入.删除.最大.最小等动态操作的时间复杂度为O(lgn).常见的

简单清晰的红黑树

查找(一) 我们使用符号表这个词来描述一张抽象的表格,我们会将信息(值)存储在其中,然后按照指定的键来搜索并获取这些信息.键和值的具体意义取决于不同的应用. 符号表中可能会保存很多键和很多信息,因此实现一张高效的符号表也是一项很有挑战性的任务. 我们会用三种经典的数据类型来实现高效的符号表:二叉查找数.红黑树.散列表. 二分查找 我们使用有序数组存储键,经典的二分查找能够根据数组的索引大大减少每次查找所需的比较次数. 在查找时,我们先将被查找的键和子数组的中间键比较.如果被查找的键小于中间键,我

[转]红黑树讲解

[前言:本文所讨论的红黑树之目的在于使读者能更简单清晰地了解红黑树的构造,使读者能在纸上清晰快速地画出红黑树,而不是为了写出红黑树的实现代码. 若是要在代码级理解红黑树,则势必需要记住其复杂的插入和旋转的各种情况,我认为那只有助于增加大家对红黑树的恐惧,实际面试和工作中几乎不会遇到需要自己动手实现红黑树的情况(很多语言的标准库中就有红黑树的实现).] (理解红黑树一句话就够了:红黑树就是用红链接表示3-结点的2-3树.那么红黑树的插入.构造就可转化为2-3树的问题,即:在脑中用2-3树来操作,得