在地图循环地图中,插入数据的正确方法是什么?
在我的代码中,在一个函数中的第一刻,我将一些数据插入到我的地图中,就像这样(并且它的工作正常):
outMap[TYPE_REQ_USER][req->number] = req;
在此之后我的地图大小为1.
在第二时刻,在其他函数内部,我需要迭代地图,如果我找到了键TYPE_REQ_USER
,我需要将新数据添加到地图的地图中。我尝试这样但在此之后我打印地图大小我们说它1而不是2(预期的)
我的地图循环地图插入数据:
for (outMap_t::iterator itOutMap = outMap.begin(); itOutMap != outMap.end(); ++ itOutMap)
{
for (intMap_t::iterator itInMap = itOutMap->second.begin(); itInMap != itOutMap->second.end(); ++itInMap)
{
if (itOutMap->first == TYPE_REQ_USER)
{
//map insert
outMap[TYPE_REQ_USER][req->number] = req;
}
}
}
那么我的循环插入有什么问题?
编辑2
所以现在对于相同的键(TYPE_REQ_USER),我可以有两个不同的元素。
所以知道我什么时候试图迭代地图并删除键的元素我有分段错误错误,因为在第一次迭代中我做:
qnRunningType_JobId.erase(itOutMap);
但是在第二次迭代中我有sementation fault错误,因为我试图删除itOutMap
但我们已经在第一次迭代中删除了..
答案 0 :(得分:1)
(评论转换为完整性答案)
使用std::map
,插入已存在的项目覆盖现有项目。您可以使用std::map::insert
检查是否已覆盖项目,并检查所返回对的第二项,如here所述。