【发布时间】:2014-07-02 05:03:55
【问题描述】:
我有一个 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];
}
}
问题是,Job 中的isActive 的值存储在unordered_map 中并没有改变?当我单步调试调试器时,我可以看到job 中isActive 的值发生了变化。但是当我从jobMap(在我获得工作的同一索引处)获得jobEvent2 时,该值是原始值。
为什么 unordered_map 返回一个副本?它不应该返回参考吗?为什么我不能更新 unordered_map 中的值?我究竟做错了什么 ?如何更正?
【问题讨论】:
-
它确实返回了一个引用,这很容易通过 C++ 引用显示。然后你继续复制它。
标签: c++ unordered-map