for-loop - 调用不匹配...... lambda 函数和 for_each() 出现一些错误
问题描述
我正在尝试使用 for_each() 来运行一个函数 print_a(),它需要一个字符串和一个 int。该函数应该打印字符串并仅使用 int 进行格式化。int 是从一个名为longestword() 的函数中获取的,该函数返回映射中最长单词的长度。
这是包含第一个 for_each 的函数
void input_a(vector<string> inlist)
{
map<string, int> wordcount;
transform(inlist.begin(), inlist.end(), inserter(wordcount, wordcount.end()), [inlist] (string c){return counter(c, inlist);});
int longest = longestword(wordcount);
for_each(wordcount.begin(), wordcount.end(),[longest](pair <string, int> p) {print_a(p,longest);});
}
这是函数longestword();
int longestword(map<string, int> list)
{
int n{1};
for_each(list.begin(), list.end(),[&n](string s){ %ROW 71
if (s.length()>n)
{
n = s.length();
}
}); %ROW 76
return n;
}
这是函数 print_a()
void print_a(pair <string, int> entry, int i)
{
cout << setfill(' ') << right << entry.first << setw(i) << entry.second << endl;
}
这是错误代码。错误行在上面的代码中用注释标记。
In file included from /usr/include/c++/7/algorithm:62:0,
from wordlist.h:7,
from wordlist.cc:1:
/usr/include/c++/7/bits/stl_algo.h: In instantiation of ‘_Funct std::for_each(_IIter, _IIter, _Funct) [with _IIter = std::_Rb_tree_iterator<std::pair<const std::__cxx11::basic_string<char>, int> >; _Funct = longestword(std::map<std::__cxx11::basic_string<char>, int>)::<lambda(std::__cxx11::string)>]’:
wordlist.cc:76:6: required from here
/usr/include/c++/7/bits/stl_algo.h:3884:5: error: no match for call to ‘(longestword(std::map<std::__cxx11::basic_string<char>, int>)::<lambda(std::__cxx11::string)>) (std::pair<const std::__cxx11::basic_string<char>, int>&)’
__f(*__first);
~~~^~~~~~~~~~
wordlist.cc:71:52: note: candidate: longestword(std::map<std::__cxx11::basic_string<char>, int>)::<lambda(std::__cxx11::string)>
for_each(list.begin(), list.end(),[&n](string s){
^
wordlist.cc:71:52: note: no known conversion for argument 1 from ‘std::pair<const std::__cxx11::basic_string<char>, int>’ to ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’
旁注:这是一项学校作业,我们不允许使用常规的 for- 或 while 循环。
解决方案
通过将向量发送到最长字()而不是地图来解决问题
推荐阅读
- typescript - 是否可以有条件地要求 Typescript 界面中的属性
- python - 从列表输出中删除“dtype”和“object”
- c# - 在不使用 C# 访问 Internet 的情况下检查 Internet 连接的最佳方法是什么?
- python - 使用 apply 函数来简化嵌套的 for 循环?
- django - 如何在 django viewfloe 中将任务分配给组
- sql - Postgres将多行列值作为字符串返回
- asp.net - ASP.NET Core 3.1 + Angular 9 部署到 IIS 的子域
- angular - 尝试从 Ionic / Angular 应用程序中的 firestore 检索集合时收到 401 Unauthorized 响应
- rxjs - spyOn 方法返回错误“方法不存在”
- c# - 如何使用 Windows UWP API 连接到配对的音频蓝牙设备?