[英]std::map::erase infinite loop
我有一個char
的vector
和一個strings
vector
的map
。 每隔一段時間,如果我之前看過字符向量,我想在字符串向量中添加一個字符串。 下面是我的代碼。
map<vector<char>, vector<string>>::iterator myIter = mMyMap.find(vChars);
if(myIter != mMyMap.end()) {
vector<string> vStrings = myIter->second;
mMyMap.erase(myIter);
vStrings.push_back(some_other_string);
mMyMap.insert(pair<vector<char>, vector<string>>(vChars, vStrings));
return TRUE;
}
對mMyMap.erase()
的調用似乎陷入無限循環中。 我猜這是因為vStrings
沒有獲得myIter->second
的深層副本。
我是否需要將vStrings
為:
vector<string> vStrings(myIter->second);
或者什么是正確的解決方案?
我沒有看到發布的代碼片段中的錯誤(除了缺失)
)。 但我可以建議將第2-8行簡化為:
if(myIter != mMyMap.end()) {
myIter->second.push_back(some_other_string);
}
vector vStrings = myIter-> second;
和
矢量vStrings(myIter-> second);
同樣的事情。 他們都調用復制構造函數。 副本只是深拷貝。 我的猜測是被復制的向量太大(或很長)。 矢量的每個元素將被逐個復制。 因此,時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.