我有一个unordered_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];
}
}
问题是,isActive
在存储在unordered_map
中的Job
中的值没有改变吗?当我跨过调试器时,我可以看到isActive
在job
中的值发生了变化。但是,当我从jobEvent2
获得jobMap
(在我得到作业的同一索引上)时,这个值就是原始值。
为什么unordered_map返回一个副本?它不应该返回一个推荐信吗?为什么我不能更新unordered_map中的值?我做错什么了?我该如何改正?
发布于 2014-07-01 21:07:38
在这些线上
Job job = jobMap[jobEvent.jobId];
job.receiveEvent(jobEvent);
您正在制作Job
的副本并更改副本。
将第一行更改为:
Job& job = jobMap[jobEvent.jobId];
https://stackoverflow.com/questions/24523234
复制