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';
}
}
Вывод:
1 : abc
3 : abc
4 : abc
5 : abc
Как указано в комментарии, если у вас разные значения для одной клавиши, эта версия потеряет одно из значений. Если это проблема, вы можете сделать map3
a std::multimap<std::string, std::string>
или std::vector<std::pair<std::string, std::string>>
и сохранить все значения. ЖИВОЙ