copy_if带有其值也是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>>&)
回答
a 的迭代器std::map不适合与 一起使用copy_if,因为该算法只是尝试分配整个值。但是, a 的迭代器的std::map值类型为std::pair<const K, V>,这意味着它不可复制赋值。
但是,您可以使用std::inserter来完成您想要的
std::copy_if(inMap.begin(), inMap.end(), std::inserter(outMap, outMap.end()), Predicate);