0

0

c++中如何删除map或set中的特定元素 _c++ map与set元素删除方法

裘德小鎮的故事

裘德小鎮的故事

发布时间:2025-10-15 14:30:01

|

240人浏览过

|

来源于php中文网

原创

删除map和set元素推荐使用erase():按键删除简洁安全;结合find()可避免无效操作;遍历时应使用it = container.erase(it)防止迭代器失效。

c++中如何删除map或set中的特定元素 _c++ map与set元素删除方法

在C++中,mapset是常用的标准模板库(STL)容器,它们都基于红黑树实现,支持有序存储和快速查找。删除其中的特定元素时,有几种安全且高效的方法。

使用 erase() 删除指定元素

erase() 是 map 和 set 中用于删除元素的主要方法。它支持通过迭代器或键值来删除元素。

基本语法如下:

  • container.erase(key); —— 根据键删除元素,返回删除元素的个数(map为0或1,multimap可大于1)
  • container.erase(iterator); —— 通过迭代器删除,效率更高,不触发查找
  • container.erase(first, last); —— 删除一个范围内的元素

示例:删除 map 中 key 为 "Alice" 的元素

立即学习C++免费学习笔记(深入)”;

std::map scores;
scores["Alice"] = 95;
scores["Bob"] = 87;

scores.erase("Alice"); // 直接按键删除

示例:删除 set 中某个值

std::set numbers = {1, 2, 3, 4, 5};
numbers.erase(3); // 删除值为3的元素

结合 find() 安全删除元素

如果不确定元素是否存在,直接用 erase(key) 虽然不会出错,但若想先判断再操作,可以配合 find() 使用。

尤其当你需要根据条件判断是否删除,或者要对元素做其他处理时,这种方法更安全。

Evoker
Evoker

一站式AI创作平台

下载

示例:先查找再删除

auto it = scores.find("Charlie");
if (it != scores.end()) {
    scores.erase(it); // 找到了才删,避免无效操作
}

注意:不要使用 erase(find(...)) 而不判断是否等于 end(),否则可能导致未定义行为。

遍历中删除元素的正确方式

在遍历 map 或 set 时删除元素,必须小心迭代器失效问题。正确做法是使用 erase() 的返回值,它会返回下一个有效迭代器。

错误写法(可能崩溃):

for (auto it = numbers.begin(); it != numbers.end(); ++it) {
    if (*it % 2 == 0) {
        numbers.erase(it); // 删除后 it 失效,下一次 ++it 出错
    }
}

正确写法:

for (auto it = numbers.begin(); it != numbers.end(); ) {
    if (*it % 2 == 0) {
        it = numbers.erase(it); // erase 返回下一个迭代器
    } else {
        ++it;
    }
}

对于 map,逻辑相同,只是判断条件基于 key 或 value。

小结:推荐做法

  • 单个删除:直接用 erase(key) 最简洁
  • 条件删除前先 find:确保元素存在,避免多余查找
  • 遍历中删除:使用 it = container.erase(it) 避免迭代器失效
  • 批量删除:可用范围 erase,如从 begin 到某位置
基本上就这些。只要注意迭代器有效性,map 和 set 的删除操作简单又安全。

相关专题

更多
golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

75

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

33

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

59

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

37

2025.11.27

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

2

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

0

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

10

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

33

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

15

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 6.9万人学习

C 教程
C 教程

共75课时 | 4.1万人学习

C++教程
C++教程

共115课时 | 12.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号