遍历map删除键值报错
时间: 2023-09-06 18:09:11 浏览: 80
Map_Set.zip_C Map_C语言map_map.c
在遍历 `map` 并删除其中的键值对时,需要注意以下几点:
1. 在遍历时不能直接删除,因为这会导致迭代器失效,从而引起程序崩溃。
2. 可以在遍历时将要删除的键值对记录下来,最后再统一删除。
3. 如果使用 C++11 或以上版本,可以使用 `map::erase` 函数的返回值,来保证迭代器不失效。
以下是一个使用 C++11 的例子:
```c++
#include <iostream>
#include <map>
int main() {
std::map<int, std::string> myMap = {{1, "apple"}, {2, "banana"}, {3, "cherry"}};
// 遍历并删除键值
for (auto it = myMap.begin(); it != myMap.end(); ) {
if (it->first == 2) {
it = myMap.erase(it);
} else {
++it;
}
}
// 输出结果
for (const auto& kv : myMap) {
std::cout << kv.first << " : " << kv.second << std::endl;
}
return 0;
}
```
输出结果为:
```
1 : apple
3 : cherry
```
在遍历时,如果要删除某个键值对,使用 `map::erase` 函数进行删除,并将其返回值赋值给迭代器,从而保证迭代器不失效。
阅读全文