我有两个 std::unordered_map
具有 0 个或多个相交键的实例。我正在尝试返回 std::unordered_map
的新实例其键是 mapA
的键的交集和 mapB
这些键的值来自 mapA
.
如何找到这两个 map 的交集 mapA
和 mapB
同时仅保留 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/