gpt4 book ai didi

c++ - 在迭代 unordered_map 时修改/删除条目的简洁方法?

转载 作者:搜寻专家 更新时间:2023-10-31 00:59:50 24 4
gpt4 key购买 nike

我想做这样的事情:

unordered_map<string, deque<string>> table;

...
...

for (const auto &key_deque_pair : table) {
string key = key_deque_pair.first;
deque<string> &value_deque = key_deque_pair.second;
if (value_deque.back() == "NULL") {
//erase key
table.erase(key);
} else {
//modify value
swap(value_deque[0], value_deque.back());
value_deque.resize(1);
}
}

然后我了解到这会导致未定义的行为,因为在迭代时修改/删除会破坏迭代器。

我认为下面的代码在 //erase key 的情况下实现了预期的结果而没有这个错误。

auto it = table.begin();
while(it != table.end()) {
string key = it->first;
deque<string> &value_deque = it->second;
if (value_deque.back() == "NULL") {
//erase key
it = table.erase(it);
} else {
//modify value
swap(value_deque[0], value_deque.back());
value_deque.resize(1);
++it;
}
}

//modify value 的大小写是否也正确,还是我应该使用 it 删除条目,然后将修改后的值放入该键?

还有,有什么方法可以使用 for ... each 或以简洁的形式做到这一点吗?

最佳答案

这是在遍历容器时从容器中删除的正确方法。您的 //modify value 大小写是正确的。无法使用 for...each 样式从容器中安全移除。

关于c++ - 在迭代 unordered_map 时修改/删除条目的简洁方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32599579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com