我有一个char's的map和一个strings的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);或者正确的解决方法是什么?
发布于 2010-10-01 23:28:58
我在发布的代码片段中没有看到错误(除了缺少的))。但我建议将第2-8行简化为:
if(myIter != mMyMap.end()) {
myIter->second.push_back(some_other_string);
} 发布于 2010-10-01 23:43:05
向量vStrings = myIter->second;
和
向量vStrings(myIter->second);
都是一样的东西。它们都调用复制构造函数。并且该副本仅为深度副本。我的猜测是被复制的向量太大(或太长)。向量的每个元素都将被逐个复制。因此是时候了。
https://stackoverflow.com/questions/3840568
复制相似问题