【发布时间】:2017-06-23 21:23:41
【问题描述】:
所以我知道map1.insert(map2.begin(), map2.end()); 会将map2 的所有元素插入map1。
但是map2 的某些元素可能已经存在于map1 中。这些元素不会更新。
e.g. map1 has { 3 : 4, 6 : 7 }
map2 has { 11: 5, 6 : 0 }
Now if I do map1.insert(map2.begin(), map2.end()), I will get
map1 = { 3: 4, 6 : 7, 11 : 5 }
But what I want is
map1 = { 3: 4, 6 : 0, 11 : 5 }
我想知道有没有像map1.insert(map2.begin(), map2.end()); 这样强制更新已经存在的密钥的函数?
更新:
我知道可以使用:map1[k] = v 来完成 map2 中的所有键值对。
但是有没有像map1.insert(map2.begin(), map2.end()) 这样的函数可以做到这一点?
【问题讨论】:
-
第 1 步:为 map2 中的每个元素在 map 1 中查找第 2 步:如果找到 No Op 第 3 步:如果未找到则插入
-
对于 map2 中的所有键值对,看起来就像 map1[k] = v 一样简单。
-
没有像 ``map1.insert(map2.begin(), map2.end())'' 这样的函数吗?否则可以使用 map1[k] = v
-
你关注
map2之后的内容吗? -
借助 C++17 支持,您可以将 insert_or_assign 与
for_each和 lambda 一起使用,但对我来说,这比简单的免费函数要复杂得多。
标签: c++ stl unordered-map unordered