如何从含3个元素的unordered_map中删除元素?附示例代码
解决std::unordered_map的元素删除问题
嘿,我来帮你搞定这个unordered_map删除元素的问题~你的代码里m.erase(4...这部分没写完,其实std::unordered_map的erase成员函数有几种常用的重载形式,针对你的场景,最直接的就是按key删除,当然也可以用迭代器删除,下面给你详细说明:
1. 直接按key删除(最简便的方式)
你要删除key为4的元素,只需要直接传入key值给erase就行,语法非常简单:
m.erase(4);
这个函数会返回一个size_type类型的值,表示成功删除的元素个数(因为unordered_map的key是唯一的,所以返回值要么是0(没找到该key)要么是1(成功删除))。
2. 通过迭代器删除
如果你需要先找到元素,再做一些操作(比如查看元素的值)之后再删除,可以先用find方法获取迭代器,再传入erase:
auto it = m.find(4); if (it != m.end()) { // 这里可以先访问元素,比如cout << "删除的元素值:" << it->second.first << endl; m.erase(it); }
这种方式的好处是避免重复查找(如果已经通过find拿到迭代器了,直接erase比再次按key删少一次查找操作),而且能确保你删除的是确实存在的元素。
完整的可运行示例代码
把你的代码补全后,完整的验证代码如下:
#include <iostream> #include <string> #include <unordered_map> using namespace std; int main() { std::unordered_map<int, std::pair<int, int> > m; m.insert({3, std::make_pair(1,1)}); m.insert({4, std::make_pair(5,1)}); // 输出删除前的元素 cout << "删除前key=4的first值:" << m[4].first << endl; // 方式1:按key删除 m.erase(4); // 验证是否删除成功:用find判断更准确,避免自动插入默认元素 auto it = m.find(4); if (it == m.end()) { cout << "key=4的元素已成功删除" << endl; } else { cout << "key=4的元素仍存在,值为:" << it->second.first << endl; } return 0; }
运行这段代码,你会看到输出:
删除前key=4的first值:5 key=4的元素已成功删除
小提示
- 尽量避免直接用
m[key]来判断元素是否存在,因为如果key不存在,m[key]会自动插入一个默认构造的元素到map里;用find方法判断才是更安全的方式。 - 虽然你的代码里用了
using namespace std;,在小项目里没问题,但在大型项目中建议尽量避免,防止命名冲突。
内容的提问来源于stack exchange,提问作者tandem
相关产品推荐
相关产品推荐

