C++ 为什么我不能更改无序映射返回的对象的成员变量?

C++ 为什么我不能更改无序映射返回的对象的成员变量?,c++,unordered-map,C++,Unordered Map,我有一个无序的_图,我用它来存储一些对象。我需要不时地更新映射中某些对象的成员变量。但是由于某种原因,地图中的对象没有得到更新,我也不知道为什么 我有一个结构: typedef struct { unsigned int JobId : 2; bool isActive; }JobEvent; 我有一门课: class Job{ bool isActive; void receiveEvent(JobEvent jobEvent); } void receiveEvent(J

我有一个无序的_图,我用它来存储一些对象。我需要不时地更新映射中某些对象的成员变量。但是由于某种原因,地图中的对象没有得到更新,我也不知道为什么

我有一个结构:

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 in Job的值不会更改吗?当我逐步通过调试器时,我可以看到作业中isActive的值发生了变化。但是,当我从jobMap中获得jobEvent2时,该值是原始值

为什么无序的地图会返回副本?它不应该返回一个引用吗?为什么我不能更新无序映射中的值?我做错了什么?如何更正它?

在这些行中

    Job job = jobMap[jobEvent.jobId]; 
    job.receiveEvent(jobEvent);
您正在制作作业的副本并更改副本

将第一行更改为:

    Job& job = jobMap[jobEvent.jobId]; 
在这些方面

    Job job = jobMap[jobEvent.jobId]; 
    job.receiveEvent(jobEvent);
您正在制作作业的副本并更改副本

将第一行更改为:

    Job& job = jobMap[jobEvent.jobId]; 

它确实返回一个引用,这很容易用C++引用来显示。然后继续复制它。它确实返回一个引用,这很容易被C++引用所显示。然后你继续复制它。