map遍历时删除
时间: 2023-07-26 09:24:07 浏览: 79
在C++中,如果在遍历`std::map`时需要删除某些元素,建议使用迭代器,并在删除元素后将迭代器向前移动一位,以避免迭代器失效导致程序崩溃。以下是一个删除`std::map`中所有值为0的元素的示例代码:
```c++
#include <iostream>
#include <map>
int main() {
std::map<int, int> myMap = {{1, 0}, {2, 1}, {3, 0}, {4, 2}};
//遍历map,删除值为0的元素
for (auto it = myMap.begin(); it != myMap.end();) {
if (it->second == 0) {
it = myMap.erase(it); //删除元素,并将迭代器指向下一个元素
} else {
it++; //将迭代器指向下一个元素
}
}
//输出map中的元素
for (auto it = myMap.begin(); it != myMap.end(); it++) {
std::cout << it->first << " " << it->second << std::endl;
}
return 0;
}
```
在上述代码中,使用迭代器`it`遍历`std::map`中的元素,如果元素的值为0,则使用`it = myMap.erase(it)`删除元素,并将迭代器指向下一个元素;否则,将迭代器指向下一个元素。
需要注意的是,直接使用`myMap.erase(it)`删除元素可能导致迭代器失效,因此需要使用`it = myMap.erase(it)`更新迭代器。
阅读全文