修改值为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
相关产品推荐
相关产品推荐

