C++中set的用法

news2025/1/19 14:40:19

博主简介:Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的人。
博主主页:@陈童学哦
所属专栏:C++STL

在这里插入图片描述

前言:Hello各位小伙伴们好!欢迎来到本专栏C++STL的学习,本专栏旨在帮助大家了解并熟悉使用C++中的STL,C++中的STL(标准模板库)是相当好用的,🍉🍉🍉所以大家赶紧订阅一起学起来叭!那么话不多说接下来就进入本文C++中set的学习。

📢📢📢站点

  • ⭐一、set的简介
  • ⭐二、set的定义及初始化
  • ⭐三、set中常用的成员函数
  • ⭐四、set的遍历
  • ⭐五、set的真题巩固
  • ⭐六、写在最后

⭐一、set的简介

set的中文译为集合,知名见其意,因此set容器也就具有集合的属性啦!而集合这个概念大家应该上数学课应该都是学过的哈,集合它具有确定性、互异性、无序性。当然我们这里重点记住它的互异性就OK了,那么什么是互异性呢?就是说一个集合里边是不会出现两个甚至以上相同的元素的(有我没他,有他没我),说明集合还是比较专一的哈,大家以后对待感情也要专一哦!😉😉😉

  • 还有非常重要的一点就是set容器会自动地对元素进行升序排序(从小到大)

使用set时需要包含头文件:

#include<set>

⭐二、set的定义及初始化

  • 定义
    set<数据类型>变量名
    例:
//set的定义 
set<int> s1; //定义一个储存数据类型为int的set容器s1 
set<double> s2; //定义一个储存数据类型为double的set容器s2 
set<string> s3; //定义一个储存数据类型为string的set容器s3
set<int> s4[N]; //定义一个储存数据类型为int的set数组,N为大小
set<double> s5[N]; //定义一个储存数据类型为double的set数组,N为大小

⭐三、set中常用的成员函数

set中的一些函数:

//常用函数 
insert()//插入元素
count()//判断容器中是否存在某个元素
size()//返回容器的大小,即元素的个数
erase()//删除集合中某个元素
clear()//清空集合
empty()//判断集合是否为空
begin()//返回第一个元素的迭代器
end()//返回最后一个元素+1的迭代器
rbegin()//返回最后一个元素的迭代器 
rend()//返回第一个元素的迭代器 

//功能函数
find()//返回指定元素的迭代器
lower_bound()//返回第一个不小于指定值的元素的迭代器
get_allocator()//返回集合的分配器
swap()//交换两个集合的元素 
max_size()//返回集合能容纳元素个数的最大值 

⭐四、set的遍历

set的遍历一般有两种方法,接下来就让我们来看一下吧!

  • 一、通过迭代器iterator遍历
#include<iostream>
#include<set>
using namespace std;
int main()
{
	set<int> s1; //定义一个set容器 
	s1.insert(1); //插入元素 
	s1.insert(1);
	s1.insert(2);
	s1.insert(3);
	set<int>::iterator it; //定义迭代器it 
	for(it=s1.begin();it!=s1.end();it++) //通过迭代器遍历输出 
	{
		cout<<*it<<" ";
	}
}

前面我们提到了set容器是会自动给我们升序排序的,所以我们遍历出来的结果是升序的,那么如果我们想降序遍历怎么搞呢?简单,可以从end开始回溯到begin嘛,或者我们通过逆迭代器来遍历

  • 1.从end回溯到begin
#include<iostream>
#include<set>
using namespace std;
int main()
{
	set<int> s2; //定义一个set容器 
	s2.insert(1); //插入元素 
	s2.insert(1);
	s2.insert(3);
	s2.insert(2);
	set<int>::iterator it;
	for(it=--s2.end();it!=--s2.begin();it--)
	{
		cout<<*it<<" ";
	}	
}
  • 2.反向迭代器
#include<iostream>
#include<set>
using namespace std;
int main()
{
	set<int> s2; //定义一个set容器 
	s2.insert(1); //插入元素 
	s2.insert(1);
	s2.insert(3);
	s2.insert(2);
	set<int>::reverse_iterator it;  //定义反向迭代器 
	for(it=s2.rbegin();it!=s2.rend();it++)  //反向遍历输出 
	{
		cout<<*it<<" ";
	}
	
}
  • 二、通过foreach遍历
#include<iostream>
#include<set>
using namespace std;
int main()
{
	set<int> s2; //定义一个set容器 
	s2.insert(1); //插入元素 
	s2.insert(1);
	s2.insert(3);
	s2.insert(2);
	for(int it:s2) //遍历 
	{
		cout<<it<<" ";
	}
	
}

这种遍历简单易记,但是无法实现降序遍历

⭐五、set的真题巩固

下面是PTA中团体程序设计天梯赛-练习集的一道L2二阶题目,代码不复杂,但是有点弯在里边,所以还是需要动下脑筋的哦

下方为题目链接!!!!!!!!

--------------------L2-014 列车调度--------------------
题目详情:
火车站的列车调度铁轨的结构如下图所示。
在这里插入图片描述
两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入,最后从出口离开。在图中有9趟列车,在入口处按照{8,4,2,5,3,9,1,6,7}的顺序排队等待进入。如果要求它们必须按序号递减的顺序从出口离开,则至少需要多少条平行铁轨用于调度?

输入格式:
输入第一行给出一个整数N (2 ≤ N ≤10^5 ),下一行给出从1到N的整数序号的一个重排列。数字间以空格分隔。

输出格式:
在一行中输出可以将输入的列车按序号递减的顺序调离所需要的最少的铁轨条数。

输入样例:
9
8 4 2 5 3 9 1 6 7
输出样例:
4

AC代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	cin>>n;
	set<int>st;
	st.insert(-1);
	for(int i=1;i<=n;i++)
	{
		int x;
		cin>>x;
		if(x<*(st.rbegin()))
			st.erase(*(st.upper_bound(x)));
		st.insert(x);
	}
	cout<<st.size()-1;
}

如果实在没有理解题目的小伙伴可以看看下面这篇有关这题详解的文章哦!
🏆嘿,我是题目链接我在这儿呢!直接点击我就好啦!🏆

⭐六、写在最后

OK本文的学习就到此结束啦,希望本文可以帮助到各位有需要的小伙伴们喔,也希望各位小伙伴们不要吝惜手里的三连哦!❤️❤️❤️

💕 回头看,轻舟已过万重山,向前看,前路漫漫亦漫漫。

🍁🍁🍁那么我们下期再见!拜拜ヾ(•ω•`)o
在这里插入图片描述

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

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

相关文章

[SWPUCTF 2021 新生赛] (WEB一)

目录 gift_F12 jicao easy_md5​ caidao include easy_sql easyrce babyrce Do_you_know_http ez_unserialize gift_F12 1.开启环境 2.题目提示f12 ctrlf 搜索flag 得到flag "WLLMCTF{We1c0me_t0_WLLMCTF_Th1s_1s_th3_G1ft} jicao 1.开启环境 2.传参 jso…

MyBatis-Plus中AutoGenerator的详细使用案例

AutoGenerator是什么&#xff1f; AutoGenerator 是 MyBatis-Plus 的代码生成器&#xff0c;通过 AutoGenerator 可以快速生成 Pojo、Mapper、 Mapper XML、Service、Controller 等各个模块的代码 AutoGenerator能干什么&#xff1f; 对于单表而言&#xff0c;几乎是一个全能…

调用百度API实现菜品识别

调用百度API实现菜品识别 1、作者介绍2、百度API菜品识别接口介绍2.1图像识别接口介绍2.2接口使用说明2.2.1请求示例2.2.2请求参数 3、调用百度API流程4、代码实现 1、作者介绍 李延&#xff0c;男&#xff0c;西安工程大学电子信息学院&#xff0c;2022级研究生 研究方向&…

如何禁用网络共享打印?

139端口是为“NetBIOS Session Service”提供的&#xff0c;主要用于提供Windows文件和打印机共享以及Unix中的Samba服务。在Windows中要在局域网中进行文件的共享&#xff0c;必须使用该服务。 开启139端口虽然可以提供共享服务&#xff0c;但是常常被攻击者所利用进行攻击&am…

chatgpt赋能Python-python_chi

Python Chi&#xff1a;掌握Python语言的关键 Python是一种面向对象、直译式计算机程序设计语言&#xff0c;被广泛应用于各种领域。无论是数据分析、人工智能、Web开发、网络爬虫还是科学计算&#xff0c;Python都扮演着重要的角色。而Python Chi则是Python语言中一个重要的方…

HQL函数--打地鼠游戏及WordCount案例分析及实现

1.打地鼠 uid,hit,m 1,1,0 1,2,1 1,3,1 1,4,1 1,5,0 1,6,0 1,7,1 2,1,1 2,2,1 2,3,1 2,4,1 2,5,1 3,1,1 3,2,1 3,3,1 3,4,0 3,5,0 3,6,1 3,7,0 3,8,1 create table tb_ds( uid int , -- 用户名 hit int , -- 第几次打地鼠 m int -- 是否命中 1命中 0 …

Request响应和Response对象

什么是Request响应和Response对象 实际上就是指Request对象和Response对象。 一个get或者post请求实际上就是一些有规律的字符串&#xff0c;Tomcat将这些字符串获取并且封装成一个可操作的对象。 通过Response对象可以设置响应数据&#xff0c;也就是Tomcat想要给浏览器发送…

Redis安全性详解

目录 ​编辑 Redis安全性详解 1.Redis的访问控制措施。 2.Redis的密码认证机制 3.Redis的绑定IP地址 4.Redis的网络ACL 5.Redis的防火墙或网络安全组 Redis安全性详解 Redis是一个快速、开源的内存数据库&#xff0c;被广泛用于缓存、消息传递和数据存储等场景。然而&a…

sql查询每组数据中时间最大的一条

sql查询每组数据中时间最大的一条 前言代码总结 前言 先来了解一下业务需求。博主好久没写过后端了&#xff0c;这一写就直接碰到我知识盲区了 我们简单还原一下&#xff0c;这里使用一个表模拟下 表的字段如下 表的内容如下&#xff0c;我们的需求就是取出相同name的数据中…

五、AOP(1)

一、AOP基本概念 1.什么是AOP 面向切面编程&#xff08;方面&#xff09;&#xff0c;利用AOP可以对业务逻辑的各个部分进行隔离&#xff0c;从而使得业务逻辑各部分之间的耦合度降低&#xff0c;提高程序的可重用性&#xff0c;同时提高了开发的效率。不通过修改源代码方式添…

章节1:Burp Suite基本介绍

章节1&#xff1a;Burp Suite基本介绍 Burp [bɜ:p] Suite [swiːt] 01 Burp Suite基本介绍 官网介绍 https://portswigger.net/ 主要产品 Burp Suite培训和认证&#xff08;Academy&#xff09;研究院&#xff08;Research&#xff09;日报&#xff08;Daily&#xff09;…

win10下annoconda安装及更改镜像源,加速软件下载速度

1 annoconda下载 文件地址&#xff0c;选择版本下载https://repo.anaconda.com/archive/ 如下在win10版本&#xff1a; https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Windows-x86_64.exe 完成后根据向导安装。 2 清空镜像源&#xff0c;回到初始状态…

QT之动态加载下拉框(QComboBox)

QT之动态加载下拉框&#xff08;QComboBox&#xff09; 简介效果原理分析实现 简介 这两天遇到一个需求&#xff0c;需要下拉选项中动态加载一些数据&#xff0c;实现之后感觉挺有意思&#xff0c;特此记录一下。 效果 还是先看下效果&#xff0c;源码也放在文末了 原理分…

图形学中的抗锯齿讨论以及在unity中的应用

抗锯齿(Anti-Aliasing)是图形学中&#xff0c;很重要的一个部分。本文旨在做一些分析总结&#xff0c;并对平时不理解的细节&#xff0c;做了调研总结&#xff0c;但毕竟不是做GPU行家&#xff0c;所以有不对的地方&#xff0c;欢迎拍砖^^。 1 什么是锯齿 下图&#xff0c;是…

Linux 防火墙 Firewalld

firewalld概述 firewalld防火墙是Centos7系统默认的防火墙管理工具&#xff0c;取代了之前的iptables防火墙&#xff0c;也是工作在网络层&#xff0c;属于包过滤防火墙。 firewalld和iptables都是用来管理防火墙的工具&#xff08;属于用户态&#xff09;来定义防火墙的各种规…

《C++primer》5~6章总结

《CPrimer》 语句函数 语句 if else 就C而言&#xff0c;规定else与离它最近的尚未匹配的if匹配&#xff0c;从而消除程序的二义性&#xff0c;所以最好的处理方法就是养成习惯在if else 后面加一个花括号swirch搭配case关键字使用&#xff0c;case关键字和它对应的值一起被称…

PCB~地平面

地平面的特征 • 在同一块板子上&#xff0c;无线数字信号经常会有较高的数字逻辑&#xff0c;例如高增益的RF电路 • 屏蔽和接地对于接收端的设计是非常有效的 – 辐射在源端就应该被屏蔽掉 – 地平面电流应该回到源端 – 电源电流会通过最小电阻和电感路径回到源端 • 至少有…

Git的项目管理工具的使用

Git的项目管理工具的使用 为什么学习Git软件&#xff1f; 主流开发中&#xff0c;基于互联网的开发项目都会使用git进行资源管理 资源管理&#xff1a;人力资源 ​ 代码资源 : .java .c . js 等 ​ 文档资源 &#xff1a; doc.md ,pdf 等 git是最常用的scm软件&#xff08;Soft…

Vivado综合属性系列之九 CLOCK_BUFFER_TYPE

目录 一、前言 二、CLOCK_BUFFER_TYPE ​ ​2.1 属性说明 ​ ​2.2 工程代码 ​ ​2.3 结果 一、前言 ​ ​在设计中&#xff0c;对于时钟端口驱动时钟单元时&#xff0c;工具会自动综合出全局时钟BUFG连接时钟源和时钟负载。当存在全局时钟BUFG不足或者因为某些…

3512. 最短距离总和

Powered by:NEFU AB-IN Link 文章目录 3512. 最短距离总和题意思路代码 3512. 最短距离总和 题意 给定一张带权无向完全图&#xff0c;设点的编号为 1,2,3,4,5…n&#xff08;以邻接矩阵的形式给出&#xff09;。 计算依次拿走第 i个点后&#xff0c;剩余所有点到其他点的最短…