C ++ - 使用lambda添加地图到地图

时间:2016-05-20 09:48:52

标签: c++ lambda c++-standard-library

我只是想知道在C ++中是否有任何性感的方式(使用标准库函数)来做类似的事情:

我有两张相同类型的地图(std :: map)。我想将两个地图一起添加,但也决定添加哪些元素,哪些元素不添加lambda谓词。

任何解决方案?感谢。

1 个答案:

答案 0 :(得分:6)

您可以将std::copy_ifstd::inserter结合使用。如果值为偶数,此示例仅将b中的元素添加到a

std::copy_if(b.begin(), b.end(), std::inserter(a, a.end()),
             [](auto&& e){return e.second%2 == 0;});

如果您发现自己需要这几次,可以将其分解为辅助函数:

template <typename T, typename F>
void merge_maps (T& a, const T& b, const F& filter) { 
    std::copy_if(b.begin(), b.end(), std::inserter(a, a.end()), filter);
}

merge_maps(a, b, [](auto&& e){return e.second%2 == 0;});