我有一个看起来像这样的容器:
std::map<std::string, std::vector<double>> id_values;
我将遍历其他双打和字符串对,如果不存在,我想向地图添加一个新元素,如果存在,则要附加到向量上。是否有比以下更简洁的解决方案?
auto loc = id_values.find(key);
if (loc != id_values.end()) {
loc->second.push_back(val);
} else {
loc.insert({key, {val}});
}
我想我可以做一个三元运算符,但是我认为这会使代码的可读性降低,我想知道是否有更好的模式来实现我想要的目标,而不是有条件的。
答案 0 :(得分:1)
您可以只使用operator[]
。如果它在映射中,它将返回具有指定键的对象的引用,或者如果查找失败,它将创建一个新的值初始化的对象(在您的情况下为空的vector
)并返回一个引用到新对象。
id_values[key].push_back(val);
或者,如果您需要使用其他构造函数参数而不是默认构造所映射的类型,则可以使用try_emplace
(如果不能使用C ++ 17,则可以使用常规emplace
):< / p>
auto [itr, inserted] = id_values.try_emplace(key, vector_constructor_args...);
itr->second.push_back(val);
答案 1 :(得分:-1)
您好,我想您要做的是使用方法insert
或operator[]
在容器中插入一个元素。
通过使用operator []
,您要做的就是:
for(auto it: map1)
if(map2.find(it.first) == map2.end() )
map2.insert(map2.end(),it);