在C++中,std::sort可通过自定义比较函数实现降序、结构体字段排序等复杂逻辑,支持函数指针、Lambda表达式和函数对象;例如用bool cmp(int a, int b) { return a > b; }可实现降序排序,Lambda可用于按字符串长度排序,结构体则可通过成员变量如分数进行排序,需注意保持严格弱序并避免修改外部状态。
在C++中使用
时,可以通过自定义比较函数来控制排序规则。默认情况下,
按升序
排列
元素,但通过传入自定义的比较函数或函数对象,可以实现降序、结构体排序、字符串长度排序等复杂逻辑。
基本语法:自定义比较函数
自定义比较函数是一个返回
类型的函数,接受两个参数,当第一个参数应排在第二个之前时返回
。
示例:整数降序排序
使用Lambda表达式
Lambda让定义比较规则更简洁,适合简单逻辑。
示例:按字符串长度排序
对结构体或类进行排序
常用于根据对象的某个字段排序。
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++免费学习笔记(深入)
”;
示例:按学生分数排序
注意事项和技巧
写比较函数时需注意以下几点:
比较函数必须是
严格弱序
,即不能出现a
)提升性能
可结合
std::sortsortbooltrue#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
} 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(按长度升序)
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)
operator()std::greater<>std::less<>