我有map
vector
个char
和vector
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);
或者什么是正确的解决方案?
答案 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);
同样的事情。他们都调用复制构造函数。副本只是深拷贝。我的猜测是被复制的向量太大(或很长)。矢量的每个元素将被逐个复制。因此,时间。