由于C++17 std::map
提供了一个merge()
成员函数。它允许您从一张地图中提取内容并将其插入到另一张地图中。基于您的数据的示例代码可以编写如下:
using myMap = std::map<std::string, std::list<std::string>>;
myMap map2 = { {"kiran", {"c:\\pf\\kiran.mdf", "c:\\pf\\kiran.ldf"}},
{"test", {"c:\\pf\\test.mdf", "c:\\pf\\test.mdf"}} };
myMap map1 = { {"temp", {"c:\\pf\\test.mdff", "c:\\pf\\test.ldf"}},
{"model", {"c:\\model\\model.mdf", "c:\\pf\\model.ldf"}} };
map2.merge(map1);
for (auto const &kv : map2) {
std::cout << kv.first << " ->";
for (auto const &str : kv.second)
std::cout << " " << str;
std::cout << std::endl;
}
输出:
kiran -> c:\pf\kiran.mdf c:\pf\kiran.ldf
模型 -> c:\model\model.mdf c:\pf\model.ldf
temp -> c:\pf\test.mdff c :\pf\test.ldf
测试 -> c:\pf\test.mdf c:\pf\test.mdf
笔记:
- 一个键只能在地图中存在一次(即,
kiran
在您的示例中)。如果两个 map 包含相同的 key,则相应的元素将不会合并到并保留在.test
temp
model
map2
map1
- 如果所有元素都可以合并到
map2
中,map1
则将变为空。
- 该
merge()
功能非常有效,因为元素既不复制也不移动。相反,只有映射节点的内部指针被重定向。
Coliru 上的代码