私はこのようにマップを定義しました:
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 回の反復で可能な出力です。
1) 2
2) 0
1) 1
2) 0
3) 2
3) 1
そのため、clear()
実際には機能していないようです。
に置き換えることmapElement.second.clear();
で問題を解決できますmap.at(mapElement.first).clear();
。
この動作の理由は何ですか?