在C++的STL中,自定义排序和比较主要通过
std::sort等算法配合自定义比较函数或函数对象来实现。你可以根据数据类型或排序逻辑灵活定义比较方式,适用于基本类型、结构体、类对象等。 使用函数指针进行自定义比较
你可以定义一个返回
bool类型的函数,接受两个参数,用于判断第一个是否应排在第二个之前。 示例:
对整数数组按降序排列:
bool greater(int a, int b) {<br> return a > b;<br> }<br> <br> std::vector<int> nums = {5, 2, 8, 1};<br> std::sort(nums.begin(), nums.end(), greater);
此时数组将按从大到小排序。
使用Lambda表达式(推荐方式)C++11起支持Lambda,使自定义比较更简洁,尤其适合临时或简单逻辑。
std::vector<int> nums = {5, 2, 8, 1};<br> std::sort(nums.begin(), nums.end(), [](int a, int b) {<br> return a < b; // 升序<br> });
若要按绝对值排序:
std::sort(nums.begin(), nums.end(), [](int a, int b) {<br> return std::abs(a) < std::abs(b);<br> });对结构体或类进行自定义排序
当容器中存储的是结构体时,需明确比较规则。

全面的AI聚合平台,一站式访问所有顶级AI模型


定义结构体:
struct Person {<br> std::string name;<br> int age;<br> };
按年龄升序排序:
std::vector<Person> people = {{"Alice", 30}, {"Bob", 25}};<br> std::sort(people.begin(), people.end(), [](const Person& a, const Person& b) {<br> return a.age < b.age;<br> });
若年龄相同,再按名字字母顺序排:
return a.age == b.age ? a.name < b.name : a.age < b.age;重载函数对象(仿函数)
定义一个类并重载
operator(),可用于需要状态或复用的场景。
struct ComparePerson {<br> bool operator()(const Person& a, const Person& b) const {<br> return a.age < b.age;<br> }<br> };<br> <br> std::sort(people.begin(), people.end(), ComparePerson{});
这种方式在作为容器(如
std::set)的模板参数时特别有用。
基本上就这些。使用Lambda最方便,函数对象适合复杂或需状态的比较,函数指针兼容旧代码。关键是保证比较函数满足“严格弱序”:自反性、非对称性、传递性。不复杂但容易忽略。
以上就是C++如何在STL中实现自定义排序和比较的详细内容,更多请关注知识资源分享宝库其它相关文章!
相关标签: c++ 排列 数据类型 String sort const 结构体 bool int Lambda 指针 重载函数 Struct operator 对象 算法 大家都在看: C++0x兼容C吗? C/C++标记? c和c++学哪个 c语言和c++先学哪个好 c++中可以用c语言吗 c++兼容c语言的实现方法 struct在c和c++中的区别
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。