簡體   English   中英

std :: map :: erase無限循環

[英]std::map::erase infinite loop

我有一個charvector和一個strings vectormap 每隔一段時間,如果我之前看過字符向量,我想在字符串向量中添加一個字符串。 下面是我的代碼。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM