c++ - 如何获得两个 std::unordered_map 的集合交集?

标签 c++ unordered-map

我有两个 std::unordered_map具有 0 个或多个相交键的实例。我正在尝试返回 std::unordered_map 的新实例其键是 mapA 的键的交集和 mapB这些键的值来自 mapA .

如何找到这两个 map 的交集 mapAmapB同时仅保留 mapA 中的值?

以下提供了我要实现的结果的示例:

#include <unordered_map>

typedef std::unordered_map<std::string, double> MapType;

MapType intersectFilter(MapType const & mapA, MapType const & mapB);

int main()
{
    MapType mapA = { {"keyA",  1}, {"keyB", 2} };
    MapType mapB = { {"keyA",  5}, {"keyK", 3} };

    MapType mapC = intersectFilter(mapA, mapB);
    // The resulting `mapC` should be:
    // { {"keyA", 1} }

    return 0;
}

最佳答案

您不是在删除条目,而是有条件地复制。这听起来像是 std::copy_if 的工作.

MapType intersectFilter(MapType const & mapA, MapType const & mapFilter)
{
    MapType result;
    auto inserter = std::inserter(result, result.end());
    auto predicate = [&mapFilter](MapType::const_reference item) 
    { return mapFilter.find(item.first) == mapFilter.end(); }; // or mapFilter.contains in C++20
    std::copy_if(mapA.begin(), mapA.end(), inserter, predicate);
    return result;
}

关于c++ - 如何获得两个 std::unordered_map 的集合交集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55656233/

相关文章:

c++ - 给定一个使用 gcc 从 C++ 构建的 ELF 二进制文件,我如何确定其中某些类型的大小?

c++ - 在您的 dll 项目中包含外部 DLL 依赖项吗?

c++ - 具有大变量的高阶贝塞尔函数计算

c++ - 列表迭代器不可取消引用

c++ - 在 unordered_map 中查找的性能

c++ - c++ STL unordered_map 如何打印它的所有值?

c++ - SFINAE 类型集包含的类型

c++ - 模板方法何时可以使用稍后定义的函数,而无需前向声明?

c++ - Qt - std::unordered_map - 销毁时间

c++ - 对于 std::tr1::unordered_map,是否有任何类似于 std::map::lower_bound 的等效 std::algorithm?