跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

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

在C++中,std::sort可通过自定义比较函数实现降序、结构体字段排序等复杂逻辑,支持函数指针、Lambda表达式和函数对象;例如用bool cmp(int a, int b) { return a > b; }可实现降序排序,Lambda可用于按字符串长度排序,结构体则可通过成员变量如分数进行排序,需注意保持严格弱序并避免修改外部状态。 在C++中使用
std::sort
时,可以通过自定义比较函数来控制排序规则。默认情况下,
sort
按升序 排列 元素,但通过传入自定义的比较函数或函数对象,可以实现降序、结构体排序、字符串长度排序等复杂逻辑。 基本语法:自定义比较函数 自定义比较函数是一个返回
bool
类型的函数,接受两个参数,当第一个参数应排在第二个之前时返回
true
。 示例:整数降序排序
#include #include #include bool cmp(int a, int b) { return a > b; // 降序 } int main() { std::vector 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让定义比较规则更简洁,适合简单逻辑。 示例:按字符串长度排序
std::vector 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(按长度升序)
对结构体或类进行排序 常用于根据对象的某个字段排序。 go语言参考手册 中文CHM版 Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。本文给大家带来Go参考手册,需要的可以来下载! Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。 Go 语言特色 简洁、快速、安全 并行、有趣、开源 内存管理、v数组安全、编译 下载 立即学习 “ C++免费学习笔记(深入) ”; 示例:按学生分数排序
struct Student { std::string name; int score; }; std::vector 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)
注意事项和技巧 写比较函数时需注意以下几点: 比较函数必须是 严格弱序 ,即不能出现aoperator()
)提升性能 可结合
std::greater<>
、
std::less<>
等预定义函数对象简化代码 基本上就这些。掌握自定义比较函数后,就能灵活应对各种排序需求了。

相关文章