Почему я не могу изменить переменные-члены объекта, возвращаемого unordered_map?

У меня есть 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 в Job, хранящееся в unordered_map, не меняется? Когда я прохожу через отладчик, я вижу, что значение isActive в job изменяется. Но когда я получаю jobEvent2 из jobMap (по тому же индексу, откуда я получил работу), значение является исходным значением.

Почему unordered_map возвращает копию? Разве он не должен возвращать ссылку? Почему я не могу обновить значение в unordered_map? Что я делаю не так ? Как исправить?


person Rahul Iyer    schedule 02.07.2014    source источник
comment
Он возвращает ссылку, которую легко показать ссылкой на C++. Затем вы продолжаете копировать это.   -  person chris    schedule 02.07.2014


Ответы (1)


В этих строках

    Job job = jobMap[jobEvent.jobId]; 
    job.receiveEvent(jobEvent);

Вы делаете копию Job и изменяете копию.

Измените первую строку на:

    Job& job = jobMap[jobEvent.jobId]; 
person R Sahu    schedule 02.07.2014