我有一个 unordered_map,用来存储一些对象。有时,我需要更新映射中某些对象的成员变量。但由于某种原因, map 中的对象没有更新,我不明白为什么。
我有一个结构:
typedef struct {
unsigned int JobId : 2;
bool isActive;
}JobEvent;
我有一个类:
class Job{
bool isActive;
void receiveEvent(JobEvent jobEvent);
}
void receiveEvent(JobEvent jobEvent){
isActive = jobEvent.isActive;
}
我还有另一门课:
class MyClass {
std::unordered_map<int,Job> jobMap;
void receiveJobEvents(const std::vector<JobEvent>jobEvents);
}
void receiveJobEvents(const std::vector<JobEvent>jobEvents){
int ctr = jobEvents.size();
for (int i=0; i<ctr; i++){
JobEvent jobEvent = jobEvents[i];
Job job = jobMap[jobEvent.jobId];
job.receiveEvent(jobEvent);
JobEvent jobEvent2 = jobMap[jobEvent.jobId];
}
}
问题是,存储在unordered_map
中的Job
中的isActive
值没有改变?当我单步执行调试器时,我可以看到 job
中 isActive
的值发生了变化。但是,当我从 jobMap
获取 jobEvent2
(在与我获取作业的索引相同的位置)时,该值是原始值。
为什么 unordered_map 返回一个拷贝?它不应该返回一个引用吗?为什么我无法更新 unordered_map 中的值?我究竟做错了什么 ?我该如何纠正它?
最佳答案
在这些行中
Job job = jobMap[jobEvent.jobId];
job.receiveEvent(jobEvent);
您正在制作作业
的拷贝并更改拷贝。
将第一行更改为:
Job& job = jobMap[jobEvent.jobId];
关于c++ - 为什么我无法更改 unordered_map 返回的对象的成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24523234/