在 map 循环中,插入数据的正确方法是什么?
在我的代码中的第一个时刻,我在一个函数中将一些数据插入到我的 map map 中,就像这样(它的工作很好):
outMap[TYPE_REQ_USER][req->number] = req;
在此之后我的 map 大小为 1。
在第二个时刻,在其他函数中,我需要迭代 map ,如果我找到键 TYPE_REQ_USER
我需要向 map 的 map 添加新数据。我这样尝试,但在此之后我打印了 map 大小,我们说它是 1 而不是 2(预期的)
我的 map 循环插入数据的 map :
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 错误,因为我试图删除 itOutMap
但我们已经在第一次迭代中删除了..
最佳答案
(评论转换为完整性答案)
使用 std::map
,插入一个已经存在的项目将覆盖现有的项目。您可以使用 std::map::insert
并检查返回对的第二项来检查您是否覆盖了一项,如 here 所述。 .
关于C++ - 将数据插入 map 循环的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45193980/