C++中set用法详解
C 中std::set用法详解2025-2026 最新标准视角std::set是 C STL标准模板库中最常用的有序关联容器之一属于集合set的实现。一、set 的核心特点必须先记住特性说明实际意义元素唯一自动去重插入重复元素会被忽略天然适合“集合”概念自动排序默认按升序排列使用比较插入后无需手动排序底层实现红黑树平衡二叉搜索树插入/删除/查找均为 O(log n)不可修改元素只能插入/删除不能直接修改已有元素的值因为会破坏排序想改值 → 删除旧的 插入新的有序遍历迭代器天然有序从 begin() 到 end() 就是升序适合需要有序输出的场景不支持随机访问没有[]运算符只能通过迭代器或 find() 访问不能像 vector 那样用下标一句话总结set 自动排序 自动去重 高效查找/插入/删除 的有序集合二、头文件与基本声明#includeset#includeiostreamusingnamespacestd;最常用声明方式setints;// 默认升序setint,greaterints2;// 降序setstringnames;// 存储字符串按字典序三、常用成员函数一览高频使用函数功能时间复杂度示例用法返回值说明insert(x)插入元素 xO(log n)s.insert(5);pairiterator, bool插入成功返回 trueerase(x) / erase(it)删除元素 x 或迭代器位置的元素O(log n)s.erase(5); s.erase(s.find(3));删除的元素个数通常 0 或 1find(x)查找元素 xO(log n)auto it s.find(10);找到返回迭代器没找到返回 end()count(x)元素 x 出现的次数只有 0 或 1O(log n)if (s.count(7)) cout “存在”;0 或 1size() / empty()大小 / 是否为空O(1)if (s.empty()) …—clear()清空所有元素O(n)s.clear();—begin() / end()指向第一个 / 最后一个后一个元素O(1)for(auto it s.begin(); it ! s.end(); it)有序迭代器lower_bound(x)第一个 ≥ x 的元素O(log n)auto it s.lower_bound(10);≥ x 的第一个位置upper_bound(x)第一个 x 的元素O(log n)auto it s.upper_bound(10); x 的第一个位置equal_range(x)[lower_bound(x), upper_bound(x))O(log n)auto [l, r] s.equal_range(5);等于 x 的范围set 中最多一个四、代码实战示例最常用场景1. 基本插入 遍历setints;s.insert(30);s.insert(10);s.insert(50);s.insert(20);s.insert(10);// 重复元素自动忽略// 遍历天然有序for(intx:s){coutx ;// 输出10 20 30 50}coutendl;2. 查找与删除if(s.find(20)!s.end()){cout找到 20\n;s.erase(20);// 删除 20}if(s.count(100)0){cout100 不存在\n;}3. lower_bound / upper_bound 经典用法区间查询// 找出 [20, 40] 之间的所有元素autols.lower_bound(20);autors.upper_bound(40);for(autoitl;it!r;it){cout*it ;// 输出 20 30}4. 自定义比较器降序 / 自定义结构体// 降序 setsetint,greaterintdesc;desc.insert({5,1,8,3});// 输出顺序8 5 3 1// 自定义结构体按某个字段排序structStudent{string name;intscore;};autocmp[](constStudenta,constStudentb){returna.scoreb.score;// 按分数降序};setStudent,decltype(cmp)students(cmp);5. pair / 多关键字排序非常常见setpairint,strings;// 默认先按 int 升序再按 string 升序s.insert({90,Alice});s.insert({85,Bob});s.insert({90,Charlie});// 90 的 Alice 在 Charlie 前面string 字典序五、set vs unordered_set vs multiset容器是否有序是否允许重复查找/插入复杂度适用场景set是否O(log n)需要有序 去重unordered_set否否平均 O(1)只需快速去重 不关心顺序multiset是是O(log n)需要有序 允许重复元素六、2026 年使用建议面试 生产需要有序输出或范围查询→ 首选 set只关心去重且不关心顺序→ 用 unordered_set更快需要有序 允许重复→ 用 multiset元素是自定义类型 → 必须提供运算符 或 自定义比较器频繁增删 元素量大10^6 → 优先考虑 unordered_set但注意哈希冲突最坏 O(n)面试高频题用 set 实现滑动窗口中位数、最近请求次数等七、最简总结背下来就够面试set有序、唯一、红黑树、O(log n) 操作插入重复元素自动忽略不可通过迭代器修改元素值constlower_bound / upper_bound 是最强范围查询利器如果你现在有具体的使用场景比如怎么用 set 去重排序、怎么实现有序去重输出、自定义比较器报错等可以贴代码或描述需求我帮你写最优解法。

相关新闻

基于51单片机的声光控制开关设计

基于51单片机的声光控制开关设计

基于51单片机的声光控制开关设计 一、设计背景与意义 在日常生活与公共场景中,传统开关需手动操作,存在忘记关灯导致能源浪费、夜间摸黑操作不便等问题。声光控制开关凭借“声控触发、光控节能”特性,无需手动干预,可自动实现灯…

2026/7/7 12:44:42 阅读更多 →
基于矢量网络分析仪的总谐波失真(THD)测量方法简析

基于矢量网络分析仪的总谐波失真(THD)测量方法简析

总谐波失真(THD)是衡量电子设备非线性失真的关键指标,广泛应用于音频、射频及功率放大器等领域的性能评估。THD定义为谐波分量均方根值与基波分量之比,通常以百分比表示。本文简要介绍在MS464xB VectorStar系列矢量网络分析仪&…

2026/5/17 7:43:25 阅读更多 →
同惠电子TH6600系列可编程大功率直流电源锂电池测试

同惠电子TH6600系列可编程大功率直流电源锂电池测试

随着全球能源转型的加速推进,锂电池凭借其高能量密度、长循环寿命、无记忆效应等优势,在电动汽车、储能系统、消费电子等众多领域得到了广泛应用。 然而,锂电池的性能和安全性直接关系到终端产品的质量和用户体验,甚至可能引发严重…

2026/7/7 0:01:21 阅读更多 →

最新新闻

ADP Agent Portal入门:跨平台智能体部署全流程

ADP Agent Portal入门:跨平台智能体部署全流程

ADP Agent Portal是腾讯云2026年4月7日发布的跨平台企业智能体门户,支持一次性部署智能体到企业微信、飞书、腾讯会议等12个主流办公平台,无需重复开发。本文提供从注册到跨平台部署的全流程指南,包含可直接复用的API调用代码。 一、部署前准…

2026/7/7 13:50:38 阅读更多 →
PARP12在细胞死亡与抗病毒免疫中的调控机制及其治疗潜力

PARP12在细胞死亡与抗病毒免疫中的调控机制及其治疗潜力

PARP家族与PARP12的发现历程多聚ADP核糖聚合酶(Poly(ADP-ribose) polymerases, PARPs)是一类具有ADP核糖基转移酶活性的蛋白质家族,在DNA损伤修复、基因组稳定性维持、细胞死亡调控和免疫应答等多种生理病理过程中发挥关键作用。人…

2026/7/7 13:48:37 阅读更多 →
直流电机静音控制方案:TB9051FTG与PIC18LF47K40应用

直流电机静音控制方案:TB9051FTG与PIC18LF47K40应用

1. 项目概述:直流电机静音控制方案在工业自动化和消费电子领域,直流电机的噪声问题一直是工程师面临的挑战。传统PWM调速方案虽然简单高效,但开关噪声和电磁干扰问题显著。本项目采用东芝TB9051FTG电机驱动IC搭配Microchip的PIC18LF47K40微控…

2026/7/7 13:44:37 阅读更多 →
Si4732收音机芯片与PIC18F57Q43微控制器的设计与优化

Si4732收音机芯片与PIC18F57Q43微控制器的设计与优化

1. Si4732收音机芯片的核心特性解析 Si4732是Silicon Labs推出的一款高性能数字信号处理(DSP)收音机接收芯片,它彻底改变了传统模拟收音机的设计方式。这款芯片在业余无线电爱好者、便携式收音机制造商和专业通信设备厂商中享有极高声誉,主要得益于以下几…

2026/7/7 13:42:36 阅读更多 →
2026图片去水印工具教程:手机电脑软件、在线网站AI效果对比

2026图片去水印工具教程:手机电脑软件、在线网站AI效果对比

日常保存的截图、素材图、平台实拍图,大多会自带平台水印、文字水印、logo水印,影响图片整洁度与使用观感。很多个人用户都在寻找免费好用的图片去水印工具,但市面上工具繁杂,要么收费限次、要么画质压缩严重、要么操作复杂。本文…

2026/7/7 13:40:35 阅读更多 →
A3910与STM32L162ZE在电机控制中的高效应用

A3910与STM32L162ZE在电机控制中的高效应用

1. 认识A3910与STM32L162ZE这对黄金搭档第一次看到A3910和STM32L162ZE这两个型号时,我正为一个工业控制项目选型发愁。A3910是Allegro MicroSystems推出的全桥电机驱动芯片,而STM32L162ZE则是STMicroelectronics的超低功耗ARM Cortex-M3微控制器。它们看…

2026/7/7 13:40:35 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻