c++MFC中,怎么删除 map<CString, vector<CString>> vector中某一个元素

map<CString, vector<CString>> 删除vector中某一个元素
for (std::map<CString, std::vector<CString>>::iterator iter=m_mapName.begin();iter!=m_mapName.end();)
{
if (nIndex==nCount)
{
m_listBoxName.DeleteString(nIndex);
m_mapName.erase(iter++);
}else
{
iter++;
}
nCount++;
}
我是这么遍历的,但是这样子把整个的iter都删除了

第1个回答  推荐于2016-06-26
for (std::map<CString, std::vector<CString>>::iterator iter=m_mapName.begin();iter!=m_mapName.end();)

{
std::vector<CString> & vec = iter->second;

// 对vec可以进行任意的操作,删除一个元素自然不在话下

}追问

那对这个vec怎么操作呢?
我直接写的vec.earse(iter1) iter1是遍历vec时的迭代器。会出现系统错误
std::vector vec=iter->second;
for (vector::iterator iter1=vec.begin();iter1!=vec.end();iter1++)
{
vec.erase(iter1);
}

追答

你这是要清空vector,直接调用vec的clear()不就完了,循环删除迭代器必然出现崩溃。如果是删除某一个元素,找到那个元素对应的迭代器删除不会有问题

追问

嗯这个问题我解决了。不是vec的问题。是iter的问题嗯。

本回答被提问者采纳
第2个回答  2015-07-28
nIndex和nCount 是怎么定义的? 还有map和vector,你是要删除map里的某一个vector里的某一个值?还是要删除map里的某一个vector?如果是前者 你在vector里还要for循环一次
相似回答