std :: map :: erase无限循环

时间:2010-10-01 15:20:56

标签: c++ stl vector map

我有map vectorcharvector strings。每隔一段时间,如果我之前看过字符向量,我想在字符串向量中添加一个字符串。下面是我的代码。

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 个答案:

答案 0 :(得分:3)

我没有在发布的代码片段中看到错误(缺少)除外)。但我可以建议将第2-8行简化为:

if(myIter != mMyMap.end()) { 
    myIter->second.push_back(some_other_string); 
} 

答案 1 :(得分:1)

vector vStrings = myIter-&gt; second;

矢量vStrings(myIter-&gt; second);
同样的事情。他们都调用复制构造函数。副本只是深拷贝。我的猜测是被复制的向量太大(或很长)。矢量的每个元素将被逐个复制。因此,时间。