【问题标题】:How to solve "expected a ; " error when sorting a vector? [closed]排序向量时如何解决“预期的;”错误? [关闭]
【发布时间】:2021-07-13 11:10:40
【问题描述】:

我正在尝试使用 sort 方法对向量进行排序。

这是我的代码

bool compare(const student * a, const student* b) 
{
    return *a.mark < *b.mark || (a.mark == b.mark && a.name < b.name);
}
sort(total_student.begin(), total_student.end(), compare);

我在return 之前收到错误,它读取expected a ';',知道为什么我可能会收到此错误吗?

【问题讨论】:

  • 您是否试图在另一个函数中定义一个函数?这个sn-p太小,无法解决问题,否则请提供minimal reproducible example
  • 您在条件的第二部分中标记和命名的权限有误。 a.mark 应该是 a->mark.
  • 请注意,*a.mark*(a.mark)not (*a).mark 相同。最好使用a-&gt;mark
  • total_student 的类型是什么?

标签: c++ algorithm sorting comparator function-definition


【解决方案1】:

您在另一个函数中定义了函数compare,或者错误的原因是函数定义行之前的另一个语法错误。

您不能在另一个函数中定义一个函数。你可以定义一个 lambda 表达式来代替函数。

将函数定义放在命名空间中。

此外,由于不正确的成员访问,函数定义无效。至少你应该写

bool compare(const student *a, const student *b) 
{
    return a->mark < b->mark || (a->mark == b->mark && a->name < b->name); 
}

你有一个指针向量看起来也很混乱。如果您有 student 类型的对象向量,那么函数定义将如下所示

bool compare(const student &a, const student &b) 
{
    return a.mark < b.mark || (a.mark == b.mark && a.name < b.name); 
}

或者你可以写

#include <tuple>

//...

bool compare(const student &a, const student &b) 
{
    return std::tie( a.mark, a.name )  < std::tie( b.mark, b.name ); 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    相关资源
    最近更新 更多