阅读量:133
在C++中,当遍历unordered_map并删除元素时,我们需要注意一些事项。因为在遍历过程中删除元素可能会导致迭代器失效,所以我们不能直接在循环中删除元素。以下是一种可行的方法:
- 遍历
unordered_map并将需要删除的键值对放入一个临时的容器中,而不是直接删除它们。 - 遍历结束后,再根据临时容器中的键值对来删除元素。
以下是一个示例代码:
#include
#include
#include
int main() {
std::unordered_map<int, std::string> myMap = {
{1, "apple"},
{2, "banana"},
{3, "cherry"}
};
std::vector<int> keysToDelete;
for (auto it = myMap.begin(); it != myMap.end(); ++it) {
if (it->first % 2 == 0) {
keysToDelete.push_back(it->first);
}
}
for (int key : keysToDelete) {
myMap.erase(key);
}
for (auto& pair : myMap) {
std::cout << pair class="hljs-string">": " << pair class="hljs-keyword">return 0;
}
在上面的示例中,我们遍历unordered_map,将所有偶数键值对的键存入keysToDelete容器中,然后再根据这些键删除元素。这样可以避免迭代器失效的问题。