c++ - 为什么我无法更改 unordered_map 返回的对象的成员变量?

标签 c++ unordered-map

我有一个 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值没有改变?当我单步执行调试器时,我可以看到 jobisActive 的值发生了变化。但是,当我从 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/

相关文章:

c++ - 为什么必须在哪里放置 “template”和 “typename”关键字?

c++ - 如何释放 boost::unordered_map 占用的空闲内存?

c++ - 复 vector 指针

c++ - 计算映射结构的散列

c++ - COM 使用 CoMarshalInterThreadInterfaceInStream 来编码接口(interface)

c++ - 将距离公式计算为给定的双整数

c++ - 多处理 Microsoft 接口(interface)定义语言 (.idl) 的构建?

c++ - 使用 mouseMoveEvent 限制 QGraphicsItem 的移动

c++ - 避免临时 std::string 调用 boost::unordered_map::find

c++ - 据说 map.find() 和 map.end() 迭代器不兼容?