我正在尝试使用for_each()来运行函数print_a(),该函数接受一个字符串和一个整数。该函数应打印字符串,并仅将int用于格式化目的。int是从一个名为longestword()的函数获取的,该函数返回map中最长单词的长度。
下面是包含第一个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);});
}下面是函数Here _Here();
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循环。
发布于 2019-12-12 23:15:40
通过将向量发送到longestword()而不是map解决了这个问题
https://stackoverflow.com/questions/59307062
复制相似问题