unordered_map覆盖现有元素

时间:2015-12-24 11:17:24

标签: c++ unordered-map

我正在尝试更新对象的一个​​类成员(将存储在unordered_maps的unordered_map中),然后更新同一对象的另一个类成员。

typedef unordered_map<int, X> inner_map;
typedef unordered_map<int, inner_map> outer_map;

struct X{
    Mem a;
    Mem b;
};

void myFunc(outer_map* o_map,
            const Mem* m_obj,
            const int outerkey,
            const int innerkey){

    X local_x;                 // Create local X for inserting when doesn't exist in map

    (*(o_map))[outerkey][innerkey] = local_x;    //Insert if not already present

    if(SOME_VAL == m_obj->Type()){
        (*(o_map))[outerkey][innerkey].a = m_obj;   //Update the 'X::a' member
    }
    else{
        (*(o_map))[outerkey][innerkey].b = m_obj;   //Update the 'X::b' member
    }
}

我第一次插入代表X的新local_x对象(因为它目前不存在于地图中),然后更新local_x&#39;之一。 s班成员。稍后我希望更新同一对象的其他类成员。看来,当这种情况发生时,我实际上已经覆盖了已插入的X对象。我想:

(*(o_map))[outerkey][innerkey] = local_x;
如果密钥不存在,

只会覆盖/插入?

1 个答案:

答案 0 :(得分:1)

您可以将代码简化为:

void myFunc(outer_map* o_map, const Mem* m_obj, int outerkey, int innerkey)
{
    X& x = (*o_map)[outerkey][innerkey];
    (SOME_VAL == m_obj->Type() ? x.a : x.b) = *m_obj;
}

[] - 运算符已经创建一个新元素(如果给定键上尚不存在)。 (还有什么可能呢?)