【问题标题】:Compare 2 unequal size of maps c++比较2个大小不等的地图c ++
【发布时间】:2020-02-19 13:42:16
【问题描述】:

我有 2 个不同大小的地图(字符串、字符串)。我需要比较并返回地图中存在的不同项目。

eg: map1 contains
"1":"abc"
"2":"xyz"
"3":"abc"
eg: map2 contains
"1":"abcd"
"2":"xyz"
"4":"abc"
"5":"abc"

如果比较 2 张地图,则只有“2”匹配。其余无以伦比。我需要将所有无与伦比的东西放到另一张地图中。

【问题讨论】:

  • 那么您对 ​​"1" 键中的新地图有什么期望? "abc""abcd"?
  • 请提供示例输出
  • map1 是参考地图。所以我的预期输出将是“1”:“abcd”,“3”:“abc”,“4”:“abc”和“5”:“abc”
  • @Arun edit 您的问题,并将所有说明放入问题中而不是评论。
  • 另外请解释为什么你需要第二张地图中的 "1":"abcd",而不是第一张地图中的 "1":"abc",即使你确实想要 "3":第一张地图中的“abc”。

标签: c++ c++17 stdmap


【解决方案1】:

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 设为std::multimap&lt;std::string, std::string&gt;std::vector&lt;std::pair&lt;std::string, std::string&gt;&gt; 并保留所有值。 LIVE

【讨论】:

  • 这可能是我的想法。不幸的是,我现在不使用 c++,但如果代码正确,我会很高兴地支持它
  • @cplusogl 你现在不使用 C++ 吗?这使您的用户名用词不当:(
  • 请注意,当一个键映射到不同的值时,使用此算法会丢失其中一个值。如示例中的"1":"abcd"
  • @eerorika 我知道这一点,但考虑到 OP 希望输出是地图而不是 vector&lt;pair&lt;string, string&gt;&gt;
  • @Ayxan 除非多地图没问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多