日志18

自定义比较函数是排序算法中用来定义元素比较规则的关键部分,决定了排序结果的顺序。下面详细解释你的代码中使用的自定义比较函数。

自定义比较函数的概念

自定义比较函数是一种用来比较两个元素的方法,通常返回一个布尔值:

  • 返回 true 表示第一个元素应该排在第二个元素之前。
  • 返回 false 表示第一个元素应该排在第二个元素之后。

在你的代码中,自定义比较函数通过 Lambda 表达式 实现。

Lambda 表达式分解

[](const student& x, const student& y) {
    if (x.sum == y.sum) {
        return x.name < y.name;
    } else {
        return x.sum > y.sum;
    }
}

这是一个 Lambda 表达式,它定义了 student 类型元素的比较规则。

1. 输入参数

const student& x, const student& y

  • 表示要比较的两个 student 对象。
  • 使用常量引用(const student&),避免拷贝对象,提升性能。

2. 逻辑分析

if (x.sum == y.sum) {
    return x.name < y.name;
} else {
    return x.sum > y.sum;
}

  • 第一层比较: 检查 x.sum 是否等于 y.sum。相等时,比较 name:使用 x.name < y.name,按字典序升序排列。
  • 第二层比较: 如果 x.sumy.sum 不相等:使用 x.sum > y.sum,按总分降序排列。

什么时候用自定义比较函数?

  • 当排序规则不是简单的升序或降序时,比如:多字段排序:按主字段排序,主字段相同再按次字段排序。特定逻辑排序:如优先处理某些类型的元素。

示例:手动定义比较函数

除了用 Lambda 表达式,也可以定义一个普通的函数来实现同样的比较规则:

定义比较函数

bool compare(const student& x, const student& y) {
    if (x.sum == y.sum) {
        return x.name < y.name;
    } else {
        return x.sum > y.sum;
    }
}

使用比较函数

sort(s.begin(), s.end(), compare);

这种方式与 Lambda 表达式功能相同,适合更复杂的逻辑。

总结

  • 自定义比较函数是排序的灵魂,灵活定义可以满足各种排序需求。
  • 使用 Lambda 表达式 更简洁,而传统函数形式适合更复杂的场景。
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务