以下代码有什么问题。我收到运行时错误

时间:2019-08-08 06:47:00

标签: c++ c++14

我试图在字符串的二维向量中找到学生的最大平均分数。编译后,我收到运行时错误。

例如。学生的平均成绩是:詹姆斯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

1 个答案:

答案 0 :(得分:4)

您的lambda中有两个小问题。首先(并在注释中指出),它应该比较leftright,而不是leftleft。其次,索引不正确-left[2]是超出范围的访问,会产生未定义的行为。您可以通过以下两种方法进行修复:

[](auto const& left, auto const& right)
    { return stoi(left[1]) < stoi(right[1]); }
    //                            ^^^^^ ^