STD Map clear()奇怪的行为

马维里克

我以这种方式定义了地图:

map<unsigned int, map<unsigned int, std::shared_ptr<MyObject>>> 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){ ... }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

std :: map的奇怪行为

来自分类Dev

std :: map的奇怪行为

来自分类Dev

使用std map和shared_ptr的奇怪内存行为

来自分类Dev

使用std map和shared_ptr的奇怪内存行为

来自分类Dev

std :: function的奇怪行为

来自分类Dev

std :: vector的奇怪行为

来自分类Dev

std :: async的奇怪行为

来自分类Dev

std::cout 的奇怪行为

来自分类Dev

使用自定义结构作为键类型访问std :: map会导致奇怪的行为

来自分类Dev

Java Map 奇怪的行为

来自分类Dev

std :: string与unicode的奇怪行为

来自分类Dev

std :: vector <string>奇怪的行为

来自分类Dev

如果KEY是std :: list或std :: vector而不是值,则std :: map的默认行为是什么?

来自分类Dev

C 11 std ::线程奇怪的行为

来自分类Dev

std :: cout在C ++中的奇怪行为

来自分类Dev

C ++ 11 std :: thread奇怪的行为

来自分类Dev

带有俄文文本的 std::map 中的奇怪顺序

来自分类Dev

std::map.clear() 引发读取访问冲突

来自分类Dev

这是适当的行为吗?std :: map迭代器无效

来自分类Dev

std :: unique_ptr和std :: ostringstream(SIGSEGV)的奇怪行为

来自分类Dev

带有std :: experimental :: is_detected的奇怪MSVC行为

来自分类Dev

使用'auto'和std :: minmax观察奇怪的行为

来自分类Dev

带有std :: initializer_list的奇怪行为constexpr

来自分类Dev

std :: string作为成员函数的参数的奇怪行为

来自分类Dev

禁用std :: map :: at()

来自分类Dev

清除多级std :: map

来自分类Dev

复制std :: map的子集

来自分类Dev

std :: map的顺序

来自分类Dev

从std :: map调用函数