当前位置: 首页 > article >正文

C++笔记 STL——set

在 C 的标准模板库STL中set是一个核心的关联式容器它以自动排序和元素唯一性为核心特性为开发者提供了高效的元素存储、查找与管理方案。不同于数组、vector 这类顺序容器set不关注元素的插入顺序而是专注于元素的有序性和唯一性是处理去重、排序、快速查找等场景的理想工具。本文将从核心特性、底层原理、基础用法、常用操作、适用场景及注意事项等方面全面讲解 STL 中的set。一、set 的核心特性元素唯一性set中不允许存储重复元素插入重复值时容器会自动忽略该操作保证容器内元素无重复。自动排序set默认按照升序对元素进行排序可自定义排序规则无需手动调用排序算法。不可修改元素set中的元素本质是常量不能直接修改元素值修改会破坏排序规则若需修改必须先删除旧元素再插入新元素。高效操作基于平衡二叉树红黑树实现查找、插入、删除操作的时间复杂度均为 \(O(log n)\)远优于顺序容器的线性查找。二、set 的底层原理set的底层实现是红黑树一种自平衡的二叉查找树。红黑树的特性保证了set始终保持有序且能在对数时间内完成核心操作自平衡避免树结构退化保证操作效率稳定有序性树的中序遍历结果即为元素的排序结果天然支持有序遍历。这也是set能实现自动排序和高效操作的核心原因。三、set 的基础用法使用set必须包含头文件set且属于std命名空间基础代码框架如下1. 头文件与命名空间#include iostream #include set // 必须包含的头文件 using namespace std;2. 定义与初始化set是模板类需指定存储元素的类型支持多种初始化方式// 1. 空 set 定义 setint s1; // 2. 列表初始化C11及以上 setint s2 {3, 1, 4, 1, 5}; // 重复元素1会被自动去重最终元素1,3,4,5 // 3. 拷贝初始化 setint s3(s2); // 4. 自定义排序规则降序 setint, greaterint s4 {3, 1, 4}; // 元素4,3,13. 插入元素使用insert()方法插入元素支持单个插入、批量插入setint s; // 单个插入 s.insert(2); s.insert(1); s.insert(3); // 插入重复元素自动忽略 s.insert(2); // 批量插入 int arr[] {5, 4}; s.insert(arr, arr 2);4. 遍历元素set支持迭代器遍历、范围 for 遍历两种常用方式// 方法1迭代器遍历 setint::iterator it; for (it s.begin(); it ! s.end(); it) { cout *it ; // 输出1 2 3 4 5 } // 方法2范围for遍历更简洁C11及以上 for (int num : s) { cout num ; }四、set 的常用成员函数set提供了丰富的成员函数覆盖增删改查、容量判断等核心操作常用函数如下表格函数功能insert(val)插入元素val自动去重 排序erase(val)删除值为val的元素erase(it)删除迭代器it指向的元素find(val)查找元素val返回指向该元素的迭代器未找到则返回end()count(val)统计元素val的个数结果只能是 0 或 1用于判断元素是否存在size()返回容器中元素的个数empty()判断容器是否为空空返回true否则返回falseclear()清空容器中所有元素begin()返回指向第一个元素的迭代器end()返回指向最后一个元素下一个位置的迭代器示例核心操作实战#include iostream #include set using namespace std; int main() { setint s {10, 20, 30}; // 1. 查找元素 auto it s.find(20); if (it ! s.end()) { cout 找到元素 *it endl; } else { cout 未找到元素 endl; } // 2. 判断元素是否存在 if (s.count(15)) { cout 15存在 endl; } else { cout 15不存在 endl; } // 3. 删除元素 s.erase(10); // 删除值为10的元素 // 4. 查看大小 cout 元素个数 s.size() endl; // 输出2 // 5. 清空容器 s.clear(); cout 是否为空 s.empty() endl; // 输出1true return 0; }五、set 的适用场景set的特性决定了它的适用场景核心用于自动去重无需手动判断重复直接插入即可保证元素唯一有序存储需要数据始终保持有序无需手动排序快速查找频繁判断元素是否存在效率远高于 vector去重 排序同时需要去重和排序的场景如统计不重复的分数、编号等。场景举例统计学生的唯一学号过滤重复的文本关键词有序存储排行榜数据快速判断某个值是否在集合中。六、set 与 multiset、unordered_set 的区别STL 中还有两个与set相似的容器三者对比如下set元素唯一自动排序底层红黑树multiset允许重复元素自动排序底层红黑树unordered_set元素唯一不排序底层哈希表查找速度更快\(O(1)\)。根据业务需求选择需要有序选set允许重复选multiset追求极致查找效率选unordered_set。七、注意事项不能直接修改set中的元素必须先删后插插入自定义类型时需要重载运算符否则set无法排序迭代器遍历的结果是有序的不要依赖插入顺序count()函数仅返回 0 或 1用于判断元素存在即可。总结STL 中的set是一个有序、唯一、高效的关联式容器依托红黑树实现了 \(O(log n)\) 级别的核心操作完美适配去重、排序、快速查找等场景。它的用法简洁、功能强大是 C 开发中处理集合类数据的首选工具之一。掌握set的用法能大幅简化代码逻辑提升程序效率是学习 STL 容器的重要一环。

相关文章:

C++笔记 STL——set

在 C 的标准模板库(STL)中,set 是一个核心的关联式容器,它以自动排序和元素唯一性为核心特性,为开发者提供了高效的元素存储、查找与管理方案。不同于数组、vector 这类顺序容器,set 不关注元素的插入顺序&…...

蓝牙GAP通用访问协议详解:从原理到多平台实战代码

在蓝牙开发中,很多开发者会困惑:“为什么设备能被搜索到?”“配对和连接的底层逻辑是什么?”“不同设备之间如何实现身份识别?”——这些问题的答案,都藏在GAP(Generic Access Profile&#xff…...

知识竞赛的类型与特点全面解析

🧩 知识竞赛的类型与特点全面解析因赛制宜 精准匹配 激发学习热情📌 引言知识竞赛作为一种普及知识、激发学习热情的活动形式,已衍生出多种类型,以适应不同的场景与需求。了解各类竞赛的特点,有助于组织者因赛制宜&a…...

2025届必备的AI科研工具实际效果

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 那种基于自然语言处理技术的智能工具,是AI写作软件,它能够辅助用户快…...

【2026 Turnitin对策】英文文章AI率95%降至0%实测:掌握这4个高阶修改法

最近不少主流英文检测系统都进行了算法升级,本来就是非母语写作,现在更是雪上加霜。 降低英文AIGC率,核心不在于简单的词汇替换,而在于打破那种机械的、过于规律的行文逻辑。今天我从逻辑底层逻辑到实操技巧,再到高效…...

当游戏帧率卡顿成为日常:一个智能管家如何让DLSS管理变得像呼吸一样自然

当游戏帧率卡顿成为日常:一个智能管家如何让DLSS管理变得像呼吸一样自然 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 你是否曾经历过这样的时刻?在《赛博朋克2077》的夜之城街道上&#xff0…...

PHP 8.9大文件处理性能跃迁实录(87%内存降低+4.2倍吞吐提升):Fiber协程+Chunked Transfer全链路解析

更多请点击: https://intelliparadigm.com 第一章:PHP 8.9大文件分块处理性能跃迁全景概览 PHP 8.9 并非官方发布版本(截至 2024 年,PHP 最新稳定版为 8.3),但作为技术前瞻推演场景,本章基于 P…...

告别配对数据烦恼:用EnlightenGAN无监督增强夜间照片,实测效果与避坑指南

告别配对数据烦恼:用EnlightenGAN无监督增强夜间照片,实测效果与避坑指南 深夜街头随手拍摄的照片总是模糊不清?行车记录仪的夜间画面噪点严重?传统图像增强方法要么需要大量配对数据,要么效果不尽如人意。今天要介绍的…...

一文讲清,erp物料管理系统是什么意思?erp物料管理系统如何运作?

在当今的制造业和商贸流通领域,库存积压、物料短缺、账实不符是困扰管理者的三大顽疾,要解决这些问题,离不开一套科学的数字化工具。那么,erp物料管理系统到底是什么意思?简单来说,它是指基于企业资源计划&…...

RIR-Generator:在MATLAB中构建虚拟声学实验室的镜像魔法

RIR-Generator:在MATLAB中构建虚拟声学实验室的镜像魔法 【免费下载链接】RIR-Generator Generating room impulse responses 项目地址: https://gitcode.com/gh_mirrors/ri/RIR-Generator 想象一下,你正在开发一款语音识别系统,或者设…...

2026届学术党必备的五大降重复率助手横评

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 旨在降低人工智能生成内容可识别性的举措,要从词汇、句法以及逻辑这三个维度着手…...

FPGA模块化固件框架设计与USB2高速传输优化

1. FPGA模块化固件框架设计解析在硬件加速领域,FPGA因其可重构特性成为高性能计算的关键载体。我们开发的模块化固件框架采用分层架构设计,核心由三个功能层构成:通信接口层:基于FTDI FT2232H芯片实现物理层USB2协议栈&#xff0c…...

一文讲清物料管理软件是什么?企业如何选对物料管理软件?

在制造业和实体经济的数字化转型浪潮中,物料管理软件已经成为企业提升竞争力的核心工具。简单来说,物料管理软件是一种利用计算机技术,对企业生产经营过程中的原材料、半成品、成品等物资进行全生命周期管理的数字化工具,它不仅仅…...

从一次授权测试复盘:Fscan在内网横向移动中的那些‘神助攻’场景

Fscan实战:内网横向渗透的高效自动化路径 凌晨三点,攻防演练的第三十二小时。当我从边缘服务器那台老旧的CentOS跳板机成功进入内网时,面对192.168.0.0/16的庞大地址空间,手指悬在键盘上迟迟没有敲下第一个命令——该从哪里开始&a…...

27岁转行做程序员,38岁我又开始转型了

27岁的时候,我从工地提桶跑路做了程序员,以为找到了铁饭碗。 35岁的时候,眼看着同事一个个被优化,我开始慌了。 38岁的时候,AI大火了,我决定主动转型。 这一次,我不想等了,我选择…...

Ubuntu 优势不再,Fedora 成新用户首选 Linux 发行版?

Ubuntu 应用分发:Snap 选择的困境Linux 应用分发领域向来混乱,2015 年问世的 Flatpak 提供了新的分发方式,被众多 Linux 发行版广泛采用。然而,Ubuntu 却推出了 Snap。Snap 对开发者限制更多,一些应用不愿采用&#xf…...

守护孩子视力,这几款教育照明灯具值得关注

每每走进随便哪一所学校,教室里的灯光,常常是我们极易忽略,然而却又特别关键的细微之处。当那些孩子们在课桌上快速书写,头顶上方那一片光线的质量,正静静地对他们的视力健康以及学习效率产生着影响。近些年来&#xf…...

CVSS 4.0 来了,你的漏洞优先级排序还准吗?聊聊新指标对安全运营的实际影响

CVSS 4.0实战指南:如何用新指标重构漏洞管理流程 当安全运营中心(SOC)的告警面板又一次被刷爆时,团队面临的永恒难题是:先修哪个?传统的CVSS 3.1评分像一把刻度模糊的尺子,而2023年底发布的CVSS 4.0带来了更精密的测量…...

你的样本量够吗?WGCNA分析前必须搞清楚的5个关键问题与实战策略

WGCNA分析前的5个关键评估:如何避免无效分析并优化实验设计 当你第一次听说WGCNA这个强大的共表达网络分析工具时,可能已经迫不及待想在自己的数据集上尝试。但先别急着运行代码——我见过太多研究者因为前期准备不足,花费数周时间却得到毫无…...

3步快速入门:为什么Pyfa是EVE玩家必备的免费舰船配置工具

3步快速入门:为什么Pyfa是EVE玩家必备的免费舰船配置工具 【免费下载链接】Pyfa Python fitting assistant, cross-platform fitting tool for EVE Online 项目地址: https://gitcode.com/gh_mirrors/py/Pyfa Pyfa(Python Fitting Assistant&…...

国产化自主可控AI体系全流程建造路径(公开完整版)

国产化自主可控AI体系全流程建造路径(公开完整版)一、方案前置说明本方案为全公开表层落地路径,涵盖体系从前期规划、搭建部署到落地迭代、生态适配的全部实操流程,无任何核心底层逻辑、本源规则、独家心法泄露,所有环…...

Themida加壳工具还能用吗?实测最新版火绒下的免杀效果与替代思路

Themida加壳技术在当代安全环境中的实效性分析与替代方案探索 在网络安全攻防对抗的永恒博弈中,加壳技术曾长期作为绕过杀毒软件检测的经典手段。Themida作为老牌商业加壳工具,其免杀效果一度成为安全研究者的关注焦点。然而随着火绒等国产安全软件检测引…...

技术文档编写用户指南与API文档

技术文档是软件开发中不可或缺的一部分,而用户指南与API文档则是其中最为关键的两类文档。用户指南帮助普通用户快速上手产品,而API文档则为开发者提供接口调用的详细说明。无论是提升用户体验,还是降低开发者的接入门槛,高质量的…...

FastAPI 基础指南:从入门到实战

FastAPI 基础:从入门到实战 🔥 这是一份超详细的 FastAPI 学习笔记,涵盖基础到实战,适合想要快速上手 FastAPI 的开发者 目录 FastAPI 简介同步与异步机制FastAPI 特点与优势创建第一个 FastAPI 项目路由详解参数详解&#xff1a…...

如何管控员工上网行为?这几款监控软件护航办公安全

数字化办公时代,企业终端设备数量激增,电脑作为核心办公载体,承载着日常办公、业务处理、数据存储等关键工作。但终端分散管理难、软件滥用、网络违规访问、文件操作失控、硬件资产流失等问题,不仅降低办公效率,更埋下…...

别再只用keyPressEvent了!Qt处理扫码枪输入的3种更稳方案(附USB/串口代码)

别再只用keyPressEvent了!Qt处理扫码枪输入的3种更稳方案(附USB/串口代码) 扫码枪在现代商业和工业场景中无处不在,从零售结账到仓库管理,再到医疗设备识别,它们极大地提升了数据录入的效率。然而&#xff…...

香蕉派BPI-PicoW-S3开发板:ESP32-S3的高性价比实战解析

1. 香蕉派BPI-PicoW-S3开发板深度解析作为一名长期混迹开源硬件圈的嵌入式开发者,当我第一次看到香蕉派BPI-PicoW-S3的参数表时,手里的咖啡差点洒在键盘上——这可能是目前性价比最高的ESP32-S3开发板了。5.5美元的价格标签下,藏着双核240MHz…...

WechatBot架构深度解析:基于数据库通信的微信自动化技术实现

WechatBot架构深度解析:基于数据库通信的微信自动化技术实现 【免费下载链接】WechatBot 项目地址: https://gitcode.com/gh_mirrors/wechatb/WechatBot 在当前企业级自动化工具百花齐放的时代,微信作为中国最普及的即时通讯工具,其自…...

英雄联盟国服换肤工具R3nzSkin完整使用指南

英雄联盟国服换肤工具R3nzSkin完整使用指南 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server R3nzSkin-For-China-Server是一款专为中国服务器英雄联盟玩…...

如何用GetQzonehistory完整备份你的QQ空间历史记忆:终极免费指南

如何用GetQzonehistory完整备份你的QQ空间历史记忆:终极免费指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否还记得那些年QQ空间里写下的青春日记?从青…...