所以我知道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())这样的函数可以做到这一点?

最佳答案

在C ++ 17中,合并然后交换。

map2.merge(map1);
map2.swap(map1);


与基于插入的变体相比,此方法的好处在于,它只是拼接节点。没有分配,没有分配,没有建设。

10-04 14:39