C++ STL 集合set

2023-11-12

本文主要简述集合的原理和用法,便于快速学习和查阅。

集合的原理

set是一个内部自动有序且不含重复元素的容器。

set集合容器实现了红黑树(Red-Black Tree)的平衡二叉检索树的数据结构,在插入元素时,它会自动调整二叉树的排列,把该元素放到适当的位置,以确保每个子树根节点的键值大于左子树所有节点的键值,而小于右子树所有节点的键值。
另外,还得确保根节点左子树的高度与右子树的高度相等,这样,二叉树的高度最小,从而检索速度最快。
要注意的是,它不会重复插入相同键值的元素,而采取忽略处理。如图是一个典型的红黑树。
这里写图片描述
平衡二叉检索树的检索使用中序遍历算法,中序遍历算法可将键值由小到大遍历出来,所以,可以理解为平衡二叉检索树在插入元素时,就会自动将元素按键值由小到大的顺序排列。

集合的使用

  • 头文件
    运用集合时别忘了头文件set
#include<set>
  • 定义

创建集合时需要指定元素的类型。

set<Data_Type> name;

Data_Type 为集合存储的数据的类型,name 为集合的名称。例如:

set<int> s;    // 命名为s的集合存储整型数据
  • 元素插入
    运用insert() 将元素插入集合。
s.insert(Data_Type);

Data_Type 类型与声明集合时的类型相同。
例如:

s.insert(1);

默认的比较规则下,是按元素值由小到大插入;如果自己指定了比较规则函数,则按自定义比较规则函数插入。

  • 遍历
    begin()end() 两个方法分别表示集合中第一个和最后一个元素。
set<int>::iterator it;  // 定义向前迭代器
for (it = s.begin(); it != s.end(); it++)  // 由第一个元素至最后一个元素
	cout << *it << endl;   // 输出该值
  • 反向遍历

使用反向迭代器reverse_iterator 可以反向遍历集合。需要使用 rbegin()rend() 两个方法,分别给出反向遍历的开始位置和结束位置。

set<int>::reverse_iterator rit;   // 定义反向迭代器
for (rit = rbegin(); rit != rend(); rit++)
	cout << *rit << endl;
  • 元素删除

删除的对象可以是某个迭代器位置上的元素、等于某键值的元素、一个区间上的元素。
删除某个元素用erase()

s.erase(Data_Type);

Data_Type 为定义时集合存储数据的类型。
例如:

s.erase(1);
  • 清空

运用clear() 将集合中元素全部删除。

s.clear();
  • 检索

使用find() 方法对集合进行检索。如果找到该值,就返回该值迭代的位置;否则返回集合最后一个元素后一个位置,即end()

set<int>::iterator it;
it = s.find(Data_Type);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ STL 集合set 的相关文章

随机推荐

  • Matplotlib绘制混淆矩阵及colorbar标签设置

    本文提供一种通过Matplotlib绘制混淆矩阵并调整colorbar标签的程序 直接上程序 from sklearn metrics import confusion matrix import matplotlib pyplot as
  • JS从编译到运行代码的过程

    js运行分为两个阶段 具体AST树以及bytecode等名词看我上一篇文章 浏览器工作原理 1 编译阶段 js代码 gt AST树 代码被解析的过程 v8引擎内部会在堆内存帮助我们创建一个对象 GlobalObject gt GO 简称GO
  • JS闭包理解

    JS闭包 1 闭包 每次看到jQuery的时候 首先想到的就是闭包 这是个常谈的问题了 今天重新回忆了一下闭包 什么是闭包 当有一个函数想要访问另一个函数内部的变量 这个是访问不了的 所有我们要用闭包来访问 所以简单的来说 闭包就是连接函数
  • STM32使用IIC协议驱动0.96寸OLED屏

    IIC是常用的协议之一 它通过不同的地址来区分设备 并且端口需要是开漏模式 并且需要接上拉电阻 要使用IIC驱动OLED 首先要配置IIC void I2C Configuration void I2C InitTypeDef I2C In
  • 程序员工资大概组成【刚毕业的大学生看过来】

    一 程序员的薪资组成是什么样子的呢 薪资组成因人而异 受到很多因素的影响 如工作地点 工作经验 工作职责 专业领域等 一般而言 中国程序员的薪资组成包括基本工资 绩效工资 津贴和奖金等 在中国 程序员的平均薪资水平受到地区 行业和职业经验等
  • C++实现一个线程池

    一 为什么使用线程池 大家都知道C 支持多线程开发 也就是支持多个任务并行运行 我们也知道线程的生命周期中包括创建 就绪 运行 阻塞 销毁等阶段 所以如果要执行的任务很多 每个任务都需要一个线程的话 那么频繁的创建 销毁线程会比较耗性能 有
  • 【计算机视觉

    文章目录 一 检测相关 9篇 1 1 Boosting Detection in Crowd Analysis via Underutilized Output Features 1 2 CircleFormer Circular Nucl
  • 油猴安装错误问题(下载中断问题)及脚本安装

    第一步 在电脑c盘找到这个文件 C Windows System32 drivers etc 然后用记事本打开hots 打开之后如此图 2 在host文件最后面 添加 131 253 33 219 edge microsoft com 13
  • 利用python绘制二三维曲面和矢量流线图

    为了实现不同数据的可视化 最近研究了python环境下的可视化方案 为后续的流体运动仿真模拟做好储备 由于python处理数据的便利性 导致目前很多后端处理或者可视化成图操作都在python中实现 比如前端是vue 加上简单的交互操作 后端
  • nextjs的getStaticProps要点

  • 24时区来源,CST,CET,UTC,DST,Unix时间戳概述、关系、转换

    全球24个时区的划分 相较于两地时间表 显示世界各时区时间和地名的世界时区表 Universal WorldTime 就显得精密与复杂多 通常世界时区表的表盘上会标示着全球24个时区的城市名称 全球24个时区是如何产生的 过去世界各地原本各
  • 【学习笔记】【DBN】十九——深度信念网络DBN

    本篇简要介绍深度信念网络DBN 是一个不太常见的神经网络 首先对深度信念网络 DBN 进行简要介绍 然后对其组成原件RBM的结构 原理和训练过程进行介绍 接着对DBN的训练过程进行介绍 目录 一 DBN概述 二 首先玻尔兹曼机 RBM 1
  • 图形推理1000题及答案解析_公考干货

    图形推理中 立体折叠类图形最大的难点就是考察人的立体空间推理 主要考察方式有折纸盒 三视图 剖面图 解题方法有特殊面法 相邻面法 相对面法 无论题目有多难都不会逃出这三个方法 但是很多考生的立体推理能力比较差 教给大家一个小技巧 在考试过程
  • LeetCode 20. 有效的括号

    题目链接 https leetcode cn problems valid parentheses C 代码如下 class Solution public bool isValid string s stack
  • The Standard C Library

    C的标志库函数是学习和使用C语言的基础 是编写经典C程序的基础 是学习其他计算机知识的基础 C标志库中一共包含了15个头文件
  • matlab求lypunov,【原创】Lyapunov、Sylvester和Riccati方程的Matlab求解

    Lyapunov Sylvester和Riccati方程是控系统常用到的几个方程 应用和计算比较广泛 在这里我们只要讨论下Lypunov方程的连续方程 离散方程的数值和解析解法 其中数值解法MATLAB提供的直接的lyap 和dlyap 函
  • ClassNotFoundException:NullPointerException:ArrayIndexOutOfBounException:FileNotFoundException:等异常

    目录 1 ClassNotFoundException 解决方法 2 NullPointerException 解决方法 3 ArrayIndexOutOfBoundsException 解决方法 4 FileNotFoundExcepti
  • EasySwoole ElasticSearch打造高性能小视频服务系统

    好久没有更新教程 现在更新一套缓存视频给大家 Elasticsearch的索引思路 将磁盘里的东西尽量搬进内存 减少磁盘随机读取次数 同时也利用磁盘顺序读特性 结合各种奇技淫巧的压缩算法 用及其苛刻的态度使用内存 所以 对于使用Elasti
  • 操作系统-管道通信

    编写程序 演示多进程并发执行和进程软中断 管道通信 父进程使用系统调用pipe 建立一个管道 然后使用系统调用fork 创建两个子进程 子进程1和子进程2 子进程1每隔1秒通过管道向子进程2发送数据 I send you x times x
  • C++ STL 集合set

    本文主要简述集合的原理和用法 便于快速学习和查阅 集合的原理 set是一个内部自动有序且不含重复元素的容器 set集合容器实现了红黑树 Red Black Tree 的平衡二叉检索树的数据结构 在插入元素时 它会自动调整二叉树的排列 把该元