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() 使用。

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

松果AI写作
松果AI写作

专业全能的高效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相关教程,阅读专题下面的文章了解更多详细内容。

36

2025.11.16

golang map原理
golang map原理

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

60

2025.11.17

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

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

40

2025.11.27

html编辑相关教程合集
html编辑相关教程合集

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

38

2026.01.21

三角洲入口地址合集
三角洲入口地址合集

本专题整合了三角洲入口地址合集,阅读专题下面的文章了解更多详细内容。

19

2026.01.21

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

234

2026.01.21

妖精漫画入口地址合集
妖精漫画入口地址合集

本专题整合了妖精漫画入口地址合集,阅读专题下面的文章了解更多详细内容。

62

2026.01.21

java版本选择建议
java版本选择建议

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

3

2026.01.21

热门下载

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

精品课程

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

共94课时 | 7.3万人学习

C 教程
C 教程

共75课时 | 4.2万人学习

C++教程
C++教程

共115课时 | 13.3万人学习

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

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