我试图在字符串的二维向量中找到学生的最大平均分数。编译后,我收到运行时错误。
例如。学生的平均成绩是:詹姆斯80,尼克65,阿米特50,费尔南多40。 现在其中最大的平均值是詹姆斯80
Lambda函数内部是否存在任何问题? 为什么下面的程序崩溃?
#include <bits/stdc++.h>
using namespace std;
int main() {
vector<vector<string> > vect{{"James", "70"}, {"Fernando", "40"},
{"Nick", "60"}, {"James", "90"},
{"Nick", "70"}, {"Amit", "50"}};
auto it = max_element(vect.cbegin(), vect.cend(),
[](auto const& left, auto const& right) {
return stoi(left[1]) < stoi(left[2]);
});
cout << (*it)[0] << " : " << (*it)[1] << endl;
return 0;
}
预期产量:詹姆斯80
答案 0 :(得分:4)
您的lambda中有两个小问题。首先(并在注释中指出),它应该比较left
和right
,而不是left
和left
。其次,索引不正确-left[2]
是超出范围的访问,会产生未定义的行为。您可以通过以下两种方法进行修复:
[](auto const& left, auto const& right)
{ return stoi(left[1]) < stoi(right[1]); }
// ^^^^^ ^