我正在尝试更新对象的一个类成员(将存储在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;
如果密钥不存在,只会覆盖/插入?
答案 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;
}
[]
- 运算符已经创建一个新元素(如果给定键上尚不存在)。 (还有什么可能呢?)