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

Luk*_*upa 3 c++ lambda c++-standard-library

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

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

有解决方案吗 谢谢.

Tar*_*ama 6

你可以std::copy_if结合使用std::inserter.本实施例中仅添加元素从b成a如果所述值是偶数:

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

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

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;});
Run Code Online (Sandbox Code Playgroud)