gpt4 book ai didi

c++ - STD Map clear() 奇怪的行为

转载 作者:太空狗 更新时间:2023-10-29 23:40:32 25 4
gpt4 key购买 nike

我这样定义了一个 map :

map<unsigned int, map<unsigned int, std::shared_ptr<MyObject>>> map;

第一个映射使用一些键和空映射(内部映射)进行了预初始化。

我有一段代码可以操作这张 map :

for(auto mapElement : map){
//cout << "1) " << mapElement.second.size() << endl;
if(mapElement.second.size()>0){
// do something
}
mapElement.second.clear();
cout << "2) " << mapElement.second.size() << endl;
}
for(auto mapElement : overwrittenMsgs){
cout << "3) " << mapElement.second.size() << endl;
}

这是一次迭代的可能输出:

1) 2
2) 0
1) 1
2) 0
3) 2
3) 1

所以看起来 clear() 并没有真正起作用。

我可以通过将 mapElement.second.clear(); 替换为 map.at(mapElement.first).clear(); 来解决这个问题。

这种行为的原因是什么?

最佳答案

这是因为您循环使用拷贝。更改循环以改为使用引用:

for(auto& mapElement : map){ ... }

关于c++ - STD Map clear() 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19157034/

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