C++ 迭代时如何更改std::map元素?
我有一个大的对象指针数组(我们称之为a),还有一个较小的对象指针映射(M),用a的索引键控 在迭代M时,我想将映射指针(第二个)与当前位于A中该索引(第一个)的指针交换 我有这样的想法: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->
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。