我有 2 张不同大小的地图(字符串、字符串)。我需要比较并返回地图中存在的不同项目。
eg: map1 contains
"1":"abc"
"2":"xyz"
"3":"abc"
eg: map2 contains
"1":"abcd"
"2":"xyz"
"4":"abc"
"5":"abc"
Run Code Online (Sandbox Code Playgroud)
如果比较 2 张地图,则只匹配“2”。剩下的无可匹敌。我需要把所有无与伦比的东西都放到另一张地图上。
set_symmetric_difference 应该可以正常工作:
#include <algorithm>
#include <iostream>
#include <iterator>
#include <map>
#include <string>
int main()
{
std::map<std::string, std::string>
map1 {
{ "1", "abc" },
{ "2", "xyz" },
{ "3", "abc" }
},
map2 {
{ "1", "abcd" },
{ "2", "xyz" },
{ "4", "abc" },
{ "5", "abc" }
},
map3;
std::set_symmetric_difference(map1.cbegin(), map1.cend(), map2.cbegin(), map2.cend(),
inserter(map3, map3.end()));
for (auto const& p : map3) {
std::cout << p.first << " : " << p.second << '\n';
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
1 : abc
3 : abc
4 : abc
5 : abc
Run Code Online (Sandbox Code Playgroud)
正如评论中提到的,如果您对单个键有不同的值,则此版本将丢失其中一个值。如果这是一个问题,您可以创建map3astd::multimap<std::string, std::string>或 astd::vector<std::pair<std::string, std::string>>并保留所有值。居住