Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 迭代时如何更改std::map元素?_C++_Stdmap - Fatal编程技术网

C++ 迭代时如何更改std::map元素?

C++ 迭代时如何更改std::map元素?,c++,stdmap,C++,Stdmap,我有一个大的对象指针数组(我们称之为a),还有一个较小的对象指针映射(M),用a的索引键控 在迭代M时,我想将映射指针(第二个)与当前位于A中该索引(第一个)的指针交换 我有这样的想法: map<LONG, Object*>::iterator mit; for (mit = M.begin(); mit != M.end(); mit++) { if ((*mit).first != NO_ID) { Object* pTmp = pA->

我有一个大的对象指针数组(我们称之为a),还有一个较小的对象指针映射(M),用a的索引键控

在迭代M时,我想将映射指针(第二个)与当前位于A中该索引(第一个)的指针交换

我有这样的想法:

map<LONG, Object*>::iterator mit;
for (mit = M.begin(); mit != M.end(); mit++)
{
    if ((*mit).first != NO_ID)
    {
          Object* pTmp = pA->ReplaceObject((*mit).first, (*mit).second);
          if (pTmp != NULL)
          {
               M.at((*mit).first) = pTmp;
          }
    }
}
map::迭代器mit;
for(mit=M.begin();mit!=M.end();mit++)
{
如果((*mit.first!=无ID)
{
Object*pTmp=pA->ReplaceObject((*mit).first,(*mit.second);
如果(pTmp!=NULL)
{
M.at((*mit).first)=pTmp;
}
}
}
这里ReplaceObject首先获取一个[(*mit.first]作为返回,然后将[(*mit.first]更改为(*mit.second)


我的映射指针顽固地保持不变——尽管调试器显示更改发生得正确


我做错了什么?

这是一个伟大的“树木换树木”时刻——我只是忽略了将修改后的撤消操作复制回撤消堆栈。一旦我停止寻找“错误”而只是阅读我的代码,这是显而易见的!哦

那么,您想更改映射排序所依据的键吗?“我的映射指针顽固地保持不变-尽管调试器似乎显示了更改”那么它是否在更改?或者它们是两种不同的东西?这是用于撤销/重做功能的。我想更改映射中的指针,它看起来已经工作了(撤消),但当我返回映射(重做)时,指针仍然具有“旧”值,因此重做失败。我假设使用按值传递的对而不是按引用调用ReplaceObject。