【发布时间】:2011-12-14 07:49:30
【问题描述】:
在 C++ 中,我使用转换将映射的所有值更改为大写。
std::map<std::string, std::string> data = getData();
// make all values uppercase
std::transform(data.begin(), data.end(), data.begin(),
[](std::pair<std::string, std::string>& p) {
boost::to_upper(p.second);
return(p);
});
这给了我以下编译错误:
/opt/local/include/gcc46/c++/bits/stl_algo.h:4805:2: error: no match for call to '(main(int, char**)::<lambda(std::pair<std::basic_string<char>, std::basic_string<char> >&)>) (std::pair<const std::basic_string<char>, std::basic_string<char> >&)
我认为我的 lambda 表达式中的参数类型有问题。这可能很简单,但我似乎无法弄清楚预期的结果。
【问题讨论】:
-
而不是假设容器存储特定类型。您可以通过 value_type 访问类型信息。
std::map<std::string, std::string>::value_type
标签: c++ stl map lambda transform