我有两个带有0个或更多交叉键的std::unordered_map实例。我正在尝试返回一个新的std::unordered_map实例,该实例的键是mapAmapB的键的交集,并且这些键的值来自mapA

如何仅保留mapA中的值,如何找到这两个 map mapBmapA的集合相交?

以下提供了我要达到的结果的示例:

#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;
}

最佳答案

最直接的实现是:

MapType intersectFilter(const MapType& mapA, const MapType& mapFilter)
{
    MapType result;
    for (const auto& pair: mapA)
    {
        if (mapFilter.find(pair.first) != mapFilter.end())
            result.insert(pair);
    }

    return result;
}

我已将参数类型更改为const引用,因为您可能不想复制参数。

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

10-10 17:28