答案是使用自定义比较函数或Lambda表达式实现排序。在C++ STL中,std::sort可通过函数指针或Lambda自定义排序规则,如降序排列整数数组。

在C++的STL中,自定义排序和比较主要通过
std::sort等算法配合自定义比较函数或函数对象来实现。你可以根据数据类型或排序逻辑灵活定义比较方式,适用于基本类型、结构体、类对象等。
使用函数指针进行自定义比较
你可以定义一个返回
bool类型的函数,接受两个参数,用于判断第一个是否应排在第二个之前。 示例:
对整数数组按降序排列:
bool greater(int a, int b) {
return a > b;
}
std::vector nums = {5, 2, 8, 1};
std::sort(nums.begin(), nums.end(), greater);
此时数组将按从大到小排序。
立即学习“C++免费学习笔记(深入)”;
使用Lambda表达式(推荐方式)
C++11起支持Lambda,使自定义比较更简洁,尤其适合临时或简单逻辑。
std::vectornums = {5, 2, 8, 1};
std::sort(nums.begin(), nums.end(), [](int a, int b) {
return a < b; // 升序
});
若要按绝对值排序:
std::sort(nums.begin(), nums.end(), [](int a, int b) {
return std::abs(a) < std::abs(b);
});
对结构体或类进行自定义排序
当容器中存储的是结构体时,需明确比较规则。
自定义设置的程度更高可以满足大部分中小型企业的建站需求,同时修正了上一版中发现的BUG,优化了核心的代码占用的服务器资源更少,执行速度比上一版更快 主要的特色功能如下: 1)特色的菜单设置功能,菜单设置分为顶部菜单和底部菜单,每一项都可以进行更名、选择是否隐 藏,排序等。 2)增加企业基本信息设置功能,输入的企业信息可以在网页底部的醒目位置看到。 3)增加了在线编辑功能,输入产品信息,企业介绍等栏
定义结构体:
struct Person {
std::string name;
int age;
};
按年龄升序排序:
std::vectorpeople = {{"Alice", 30}, {"Bob", 25}};
std::sort(people.begin(), people.end(), [](const Person& a, const Person& b) {
return a.age < b.age;
});
若年龄相同,再按名字字母顺序排:
return a.age == b.age ? a.name < b.name : a.age < b.age;
重载函数对象(仿函数)
定义一个类并重载
operator(),可用于需要状态或复用的场景。
struct ComparePerson {
bool operator()(const Person& a, const Person& b) const {
return a.age < b.age;
}
};
std::sort(people.begin(), people.end(), ComparePerson{});
这种方式在作为容器(如
std::set)的模板参数时特别有用。
基本上就这些。使用Lambda最方便,函数对象适合复杂或需状态的比较,函数指针兼容旧代码。关键是保证比较函数满足“严格弱序”:自反性、非对称性、传递性。不复杂但容易忽略。








