首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::map::erase死循环

std::map::erase死循环
EN

Stack Overflow用户
提问于 2010-10-01 23:20:56
回答 2查看 1.4K关注 0票数 1

我有一个char's的map和一个stringsstrings。如果我以前见过字符向量,我想添加一个字符串到我的字符串向量中。下面是我的代码。

代码语言:javascript
复制
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

代码语言:javascript
复制
vector<string> vStrings(myIter->second);

或者正确的解决方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-01 23:28:58

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

代码语言:javascript
复制
if(myIter != mMyMap.end()) { 
    myIter->second.push_back(some_other_string); 
} 
票数 3
EN

Stack Overflow用户

发布于 2010-10-01 23:43:05

向量vStrings = myIter->second;

向量vStrings(myIter->second);

都是一样的东西。它们都调用复制构造函数。并且该副本仅为深度副本。我的猜测是被复制的向量太大(或太长)。向量的每个元素都将被逐个复制。因此是时候了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3840568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档