c++如何自定义sort函数的比较规则_c++ sort排序自定义比较函数示例

c++中,std::sort可通过自定义比较函数实现降序、结构体字段排序等复杂逻辑,支持函数指针Lambda表达式和函数对象;例如用bool cmp(int a, int b) { return a > b; }可实现降序排序,Lambda可用于按字符串长度排序,结构体则可通过成员变量如分数进行排序,需注意保持严格弱序并避免修改外部状态。

c++如何自定义sort函数的比较规则_c++ sort排序自定义比较函数示例

在C++中使用std::sort时,可以通过自定义比较函数来控制排序规则。默认情况下,sort按升序排列元素,但通过传入自定义的比较函数或函数对象,可以实现降序、结构体排序、字符串长度排序等复杂逻辑。

基本语法:自定义比较函数

自定义比较函数是一个返回bool类型的函数,接受两个参数,当第一个参数应排在第二个之前时返回true

示例:整数降序排序

#include <algorithm> #include <vector> #include <iostream>  bool cmp(int a, int b) {     return a > b;  // 降序 }  int main() {     std::vector<int> nums = {3, 1, 4, 1, 5};     std::sort(nums.begin(), nums.end(), cmp);          for (int x : nums) std::cout << x << " ";     // 输出:5 4 3 1 1 }

使用Lambda表达式

Lambda让定义比较规则更简洁,适合简单逻辑。

c++如何自定义sort函数的比较规则_c++ sort排序自定义比较函数示例

标书对比王

标书对比王是一款标书查重工具,支持多份投标文件两两相互比对,重复内容高亮标记,可快速定位重复内容原文所在位置,并可导出比对报告。

c++如何自定义sort函数的比较规则_c++ sort排序自定义比较函数示例12

查看详情 c++如何自定义sort函数的比较规则_c++ sort排序自定义比较函数示例

示例:按字符串长度排序

std::vector<std::string> words = {"hi", "hello", "yes", "ok"}; std::sort(words.begin(), words.end(),     [](const std::string& a, const std::string& b) {         return a.length() < b.length();     });  // 结果:hi ok yes hello(按长度升序) 

对结构体或类进行排序

常用于根据对象的某个字段排序。

立即学习C++免费学习笔记(深入)”;

示例:按学生分数排序

struct Student {     std::string name;     int score; };  std::vector<Student> students = {     {"Alice", 85},     {"Bob", 92},     {"Charlie", 78} };  std::sort(students.begin(), students.end(),     [](const Student& a, const Student& b) {         return a.score > b.score;  // 分数从高到低     });  // 排序后:Bob(92), Alice(85), Charlie(78) 

注意事项和技巧

写比较函数时需注意以下几点:

  • 比较函数必须是严格弱序,即不能出现a<b和b<a同时为真
  • 不要在比较中修改外部状态,避免未定义行为
  • 若频繁调用,建议使用函数对象(重载operator())提升性能
  • 可结合std::greater<>std::less<>等预定义函数对象简化代码

基本上就这些。掌握自定义比较函数后,就能灵活应对各种排序需求了。

上一篇
下一篇
text=ZqhQzanResources