2
我這樣定義的地圖:STD地圖清楚()的奇怪行爲
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();
來解決問題。
這種行爲的原因是什麼?