比较2个大小不等的地图c ++

Aru*_*run 0 c++ stdmap c++17

我有 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”。剩下的无可匹敌。我需要把所有无与伦比的东西都放到另一张地图上。

Ayx*_*xan 8

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>>并保留所有值。居住

  • @Ayxan 除非多重映射没问题。 (2认同)