copy_if 地图的值也是 std::pair

copy_if with map whose value is also a std::pair

我有一个输入映射inMap,其类型是map<double, pair<int, double>>

我正在尝试通过 copy_if 过滤此地图,如下所示:

map<double, pair<int, double>> outMap;
copy_if(inMap.begin(), inMap.end(), outMap.begin(), [](pair<double, pair<int, double>> item) {return (true) ;} // I have simplified the predicate 

但是,编译时出现以下错误:

error: use of deleted function 'std::pair<const double, std::pair<int, double>>& std::pair<const double, std::pair<int, double>>::operator=(const std::pair<const double, std::pair<int, double>>&)

std::map 的迭代器不适合与 copy_if 一起使用,因为该算法只会尝试分配整个值。但是,std::map 的迭代器具有 std::pair<const K, V> 的值类型,这意味着它不可复制赋值。

但是,您可以使用 std::inserter 来完成您想要的

std::copy_if(inMap.begin(), inMap.end(), std::inserter(outMap, outMap.end()), Predicate);