首页 > 其他分享 >【代码】集合set

【代码】集合set

时间:2024-10-12 19:18:55浏览次数:3  
标签:set 迭代 一个 代码 元素 logn 集合

哈喽大家好,我是@学霸小羊,今天来讲一讲集合(set)。

在数学上,集合长这样:

那今天就来讲一讲编程上的集合。

集合的定义:把一些元素按照某些规律放在一起,就形成了一个集合。比如说每个班级就是一个集合,竞赛班也是一个集合,每间学校也是一个集合,等等。

集合的特点:确定性、互异性、无序性:

确定性 :表示一个元素要么在这个集合内,要么不在。(这个很水很容易理解)                            互异性 :表示一个集合当中所有元素都是不一样的,不存在在一个集合中,出现两个一模一样的元素                                                                                                                                                    无序性:表示一个集合当中的元素没有顺序,就像班级调座位一样,谁都可以坐前排,谁都可以坐后排,是平等地位的。

那么集合有什么用呢?很简单:去重和排序。

正如刚刚所说的,如果一个集合没有顺序,那么我们在遍历这个集合的时候存在着困难,因此,我们还是会按照顺序来整理元素(set会自动帮你排序和去重,从小到大),但是大家要注意了,这个和集合的特点本身并不冲突。就像是班级所有同学确实可以都有机会坐前排和后排,但班主任可能会出于某些考虑按照规则制定了座位表,这二者并不冲突。

set是一个内部自动有序且不含重复元素的容器。set 最主要的作用就是自动去重并按升序排序,因此遇到需要去重但是又不方便直接开数组的情况可以使用。set 中的元素是唯一的,其内部采用“红黑树”实现。

红黑树示意图如下:

讲了那么多set的理论知识,是时候讲讲它的用法了。

1.定义

set<typename> name;

其中,typename 可以是任何基本类型或者容器,name 是集合的名字。也可以定义set数组,例如:set st[100];这样st[0]~st[99]中的每一个元素都是一个set容器。

也可以这样定义:

struct rec{...};  //先定义结构体
set <rec > s;  // 定义set,set的成员为结构体变量类型

multiset<double > s;  //(允许集合中元素重复)

2.访问

set不支持随机访问,它只支持用迭代器访问:

set<int> s;
set<int>::iterator it;
for(it=s.begin();it!=s.end();it++)
{
    cout<<*it<<" ";
}

3.处理

set的处理函数非常多:

​

a.insert(5); //在a集合里插入一个元素5

a.size(); //获取集合的长度(即有几个数)

a.clear(); //清空集合a中的所有元素

a.empty(); //判断集合a是否为空

a.begin(); //集合a的第一个位置

a.end(); //集合a的最后一个元素的下一个位置,就没有的意思

a.rbegin(); // 返回一个逆向迭代器,指向倒数第一个元素,即最后一个元素的位置。

a.erase(it); //删除迭代器当前存着的集合a的元素

a.find(x) //在集合s中查找等于 x 的元素,并返回指向该指针的迭代器。若不存在,则返回 s.end() 。时间复杂度O(logn)O(logn)。

a.count(x)     //返回集合 s 中等于 x 的元素个数,时间复杂度O(k+logn),其中 k 为元素 x 的个数。

s.erase(x) 从 s 中删除所有等于 x 的元素。

s.insert(x); // 把一个元素 x 插入到集合 s 中,时间复杂度为O(logn)。
​

还有与迭代器有关的:

s.begin(); // 指向集合中最小元素的迭代器。

s.end(); // 指向集合中最大元素的下一个位置的迭代器。

set<int > :: iterator it; // it是一个迭代器

更详细的可以点进下面的网站进行查看:

信趣编程icon-default.png?t=O83Ahttp://43.139.152.26/p?q=c07l08​​​​​​​

标签:set,迭代,一个,代码,元素,logn,集合
From: https://blog.csdn.net/yangyanbin_sam/article/details/142874762

相关文章

  • 阅读笔记一:软件构建的本质与重要性(代码大全2)
    阅读笔记一:软件构建的本质与重要性《代码大全2》让我们深刻认识到软件构建是软件开发的核心环节。软件构建并非简单的代码编写,它是一个综合性的过程。软件构建就像建造一座大厦,从蓝图设计到一砖一瓦的搭建,都需要精心规划和细致执行。在这个过程中,我们要将抽象的业务需求转化为......
  • 2011-2022年各省金融监管水平数据(含原始数据+计算过程+计算代码)
    2011-2022年各省金融监管水平数据(含原始数据+计算过程+计算代码)1、时间:2011-2022年2、来源:国家统计局、统计年鉴3、指标:金融业增加值、金融监管支出、金融监管水平4、计算方法:金融监管水平=金融监管支出/金融业增加值5、指标解释:金融监管水平是指政府及其指定机构通过法......
  • 核密度估计 python代码
    确实,我提供的示例代码中有一些需要修正的地方。让我们逐一解决这些问题,并提供正确的核密度估计(KDE)的Python代码。使用SciPy进行核密度估计importnumpyasnpfromscipy.statsimportgaussian_kdeimportmatplotlib.pyplotasplt#生成一些随机数据data=np.random.no......
  • Qwen2.5-Coder——专门从事代码生成、完成和数学推理任务的 LLM
    1.概述论文地址:https://arxiv.org/pdf/2409.12186源码地址:https://github.com/qwenlm/qwen2.5-coderQwen2.5-Coder是其前身CodeQwen1.5的重大演进,专门设计用于执行代码生成和代码修改等编程相关任务。该系列包括两个型号,参数分别为15亿(15亿)和70亿(70亿)。2.算法......
  • 代码随想录训练营第五天|Leetcode.349,Leetcode.454,Leetcode19,Leetcode18
    一、哈希表和set和map和数组的关系 用哈希表,判断是否出现过。数值很大或者数值很分散时,不用数组,占用空间大,用set。set,multiset数组的大小是受限制的,而且如果元素很少,而哈希值太大会造成内存空间的浪费。set是一个集合,里面放的元素只能是一个key,而两数之和这道题目,不仅要判......
  • 代码签名证书:守护软件安全与信任的第一道防线
    提起软件代码签名证书,可能对大多数人来说比较陌生,但是对于软件开发者来说是一款在软件发布前必不可少的工具。之所以这样说的原因在于,代码签名证书可以有效保障用户和软件开发者的权益。代码签名证书是数字证书的一种,是专为软件开发者提供的,用于对代码软件进行数字签名的认证......
  • 有效应对‘因ffmpeg.dll缺失导致代码无法执行’的电脑故障解决方案
    当电脑出现“由于找不到ffmpeg.dll,无法继续执行代码”的错误提示时,这通常意味着某个应用程序或进程在尝试调用ffmpeg.dll这一关键动态链接库(DLL)文件时未能成功找到它。ffmpeg.dll是FFmpeg项目的一部分,该项目提供了一套用于录制、转换数字音视频,以及将其转化为流的开源库。为......
  • ReplitLM: 开源代码生成模型的新突破
    ReplitLMReplitLM模型简介ReplitLM是由在线编程平台Replit公司开发的一系列开源大型语言模型(LLM),专门用于代码生成和自然语言处理任务。这些模型在大规模代码数据集上进行训练,能够理解和生成多种编程语言的代码,为开发人员提供强大的AI辅助编程工具。目前,ReplitLM模型系列......
  • R星平台新下载游戏出现“找不到VCRUNTIME140.dll无法执行代码”的原因解析
    当玩家在R星(RockstarGames)平台新下载并尝试运行游戏时,如果遇到“找不到VCRUNTIME140.dll无法执行代码”的错误提示,这通常意味着系统中缺少必要的动态链接库文件VCRUNTIME140.dll。以下是对该问题的详细原因解析:一、VCRUNTIME140.dll文件的重要性VCRUNTIME140.dll是Microsof......
  • linux系统epoll的ET/LT模式-附串口接收代码
    LT模式下,读事件触发后,可以按需收取想要的字节数,不用把本次接收到的数据收取干净(即不用循环到recv或者read函数返回-1,错误码为EWOULDBLOCK或EAGAIN);ET模式下,读事件必须把数据收取干净,因为你不一定有下一次机会再收取数据了,即使有机会,也可能存在上次没读完的数据没有及时......