我正面临一个问题。从 lambda 函数返回 std::pair<T1, T2>。我试图用打开的 ifstream 生成地图,但编译器抱怨这个输出:
/usr/include/c++/9/bits/stl_algo.h:4337:12: 错误:使用已删除的函数 'std::pair<const std::__cxx11::basic_string, std::basic_ifstream >& std::pair <const std::__cxx11::basic_string, std::basic_ifstream >::operator=(const std::pair<const std::__cxx11::basic_string, std::basic_ifstream >&)'
我为 std::pair 浏览了 cppref,但我没有注意到 copy operator= 对这个不可行。
我相当肯定返回对的 lambdas 是可能的,那么我在下面的代码段中肯定有一些误解。
std::map<int, std::string> mFileMap;
std::map<std::string, std::ifstream> files;
std::transform(mFileMap.begin(), mFileMap.end(), files.begin(),
[](const auto& arg) -> std::pair<std::string, std::ifstream> {
std::string path(arg.second);
std::ifstream stream(path);
return std::make_pair(path, stream);
});
Run Code Online (Sandbox Code Playgroud) c++ ×1