我只是想知道在C ++中是否有任何性感的方式(使用标准库函数)来做类似的事情:
我有两张相同类型的地图(std :: map)。我想将两个地图一起添加,但也决定添加哪些元素,哪些元素不添加lambda谓词。
任何解决方案?感谢。
答案 0 :(得分: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;});
如果您发现自己需要这几次,可以将其分解为辅助函数:
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;});