前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >开发成长之路(8)-- C++从入门到开发(C++知名库:STL入门·容器(三))

开发成长之路(8)-- C++从入门到开发(C++知名库:STL入门·容器(三))

作者头像
看、未来
发布2021-09-18 10:52:55
2410
发布2021-09-18 10:52:55
举报
文章被收录于专栏:CSDN搜“看,未来”
在这里插入图片描述
在这里插入图片描述

文章目录

关联式容器

关联式容器:每笔数据都有一个键值和一个实值。 容器内部结构可能是RB-tree,也可能是hash-table等平衡树 关联式容器没有所谓头尾,只有最大元素和最小元素,所以不会有所谓的puch_back、push_front、pop_back、pop_front、begin、end等行为。

树的导览

先看图啊,看不懂再看下面的文字描述

在这里插入图片描述
在这里插入图片描述
  1. 树由节点和边构成,每棵树有最上端一个根节点,每个节点可以有具方向性的边,用来和其他节点相连。
  2. 在相连节点中,在上者称为父节点,在下者称为子节点,无子节点者称为叶节点。
  3. 子节点可以存在多个。如果只允许两个子节点,则称为二叉树。
  4. 不同节点如果拥有相同父节点,则称为兄弟节点。
  5. 根节点至任何节点之间有唯一路径,路径所经过的边数,称为路径长度(length)。
  6. 根节点至任一节点的路径长度,称为该节点的深度(depth)。
  7. 某节点至其最深节点的路径长度,称为该节点的高度(height)。
  8. 整棵树的高度便以根节点的高度为准。
  9. 任何节点的大小(size)是指其所有子代(包括自己)的节点总数。

二叉搜索树

所谓二叉搜索树,可提供对数时间的元素插入和访问。二叉搜索树的节点放置规则是:任何节点的键值一定大于去其左子树中的每一个节点的键值,并小于其右子树的每一个节点的键值。

所以在二叉树中找到最大值和最小值是很简单的,比较麻烦的是元素的插入和移除。 插入新元素时,从根节点开始,遇键值较大者就向左,遇键值较小者就向右,一直到尾端,即为插入点。 移除旧元素时,如果它是叶节点,直接拿走就是了;如果它有一个节点,那就把那个节点补上去;如果它有两个节点,那就把它右节点的最小后代节点补上去。

在这里插入图片描述
在这里插入图片描述

平衡二叉搜索树

高低脚的二叉搜索树总归是效率不高的,所以我们就要认为的调整它的高低脚。

平衡的大致意思是:任何两个叶节点的深度差不过1吧。

那我们来看一下调整树的节点使平衡的操作吧:旋转

单旋转
在这里插入图片描述
在这里插入图片描述

看图写字,我就不做过多赘述了。

双旋转
在这里插入图片描述
在这里插入图片描述

这个图我就要说两句了,有的人可能乍一看会觉得这用上面的单旋转就好了,为什么根节点不是14而是16?为什么这个会要叫双旋转?转着好玩的吗?

其实不然,你可以试着把单旋转做法的图画出来,将会惊奇的发现,还是不平衡,这就很尴尬了。

正确的转法应该是这样的:

在这里插入图片描述
在这里插入图片描述

set

set是什么?set就是集合。

集合有什么特性,无序性、唯一性。当然,这里的集合其实是会被根据键值自动排序的、

set的键值就是实值,实值就是键值、

对于set的迭代器,我们其实是无法使用set的迭代器去修改set的元素的值的。因为set的元素值关系到set元素的排列规则,如果任意改变set元素的值,会严重破坏其组织。

对set进行增删操作呢,那就比较不一样了。操作之前的迭代器在操作之后依然是有效的。除了被删除的那个迭代器。

标准set的底层是以红黑树为支撑的,又由于set的所有操作,红黑树都有提供,所以说set只是调用了红黑树的接口而已、


map

map的特性啊,map的所有元素都会根据元素的键值自动被排序,map的所有元素都是pair,同时拥有实值和键值,<键值,实值>

我们可以通过迭代器来修改map的实值,当然,键值是不行的。

对map进行增删操作,操作之前的迭代器在操作之后依然是有效的。除了被删除的那个迭代器。

map的底层也是红黑树,具体参照上面的。


容器讲到这里,下一篇就是我最喜欢的:空间配置器。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/04/30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 关联式容器
  • 树的导览
    • 二叉搜索树
      • 平衡二叉搜索树
        • 单旋转
        • 双旋转
    • set
    • map
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档