You need to enable JavaScript to run this app. 修改值为pair列表的unordered_map中配对元素值不生效问题求助
优惠活动
大模型
产品
解决方案
定价
更多

修改值为pair列表的unordered_map中配对元素值不生效问题求助

问题根因

问题出在这一行代码:
adjNodesStructure adjNodes = global_RT["ialu"];
这里你做了值拷贝,相当于把global_RT["ialu"]对应的整个list完整复制了一份存到局部变量adjNodes里,后续你对迭代器的所有修改都是作用在这个局部副本上,完全不会影响全局global_RT里的原始数据,所以才会出现修改不生效的情况。

修正方案

把局部变量声明为引用即可,直接绑定到global_RT里的原始list,修改就会直接作用在原数据上,修正后的代码如下:

typedef std::unordered_map< std::string, std::list< std::pair<std::string, int> > > di_Acyclic_Graph_Structure;
di_Acyclic_Graph_Structure global_RT;
global_RT["ialu"].push_back(std::make_pair("ialu1",1));
global_RT["ialu"].push_back(std::make_pair("ialu2",1));

// 此处添加&声明为引用类型,直接绑定全局数据里的list
adjNodesStructure& adjNodes = global_RT["ialu"];

for (auto iterator=adjNodes.begin(); iterator!=adjNodes.end(); iterator++)
{
  if (/* 你的判断逻辑 */)
  {
    (*iterator).second = 2;
    // 现在修改会直接同步到global_RT的原始数据中
  }
}
补充说明
  • 如果你不需要修改list的结构(增删元素),仅要修改元素内部的值,也可以直接遍历global_RT["ialu"],不需要额外定义中间变量
  • C++中默认的=赋值对于非引用类型都是值拷贝,要操作原始对象必须显式声明为引用类型

内容的提问来源于stack exchange,提问作者user15049375

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 01:54:05