在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(按长度升序)
对结构体或类进行排序
常用于根据对象的某个字段排序。
立即学习“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)
注意事项和技巧
写比较函数时需注意以下几点:
比较函数必须是严格弱序,即不能出现a不要在比较中修改外部状态,避免未定义行为若频繁调用,建议使用函数对象(重载operator())提升性能可结合std::greater、std::less等预定义函数对象简化代码
基本上就这些。掌握自定义比较函数后,就能灵活应对各种排序需求了。
以上就是c++++如何自定义sort函数的比较规则_c++ sort排序自定义比较函数示例的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1481164.html
微信扫一扫
支付宝扫一扫