使用自定义比较规则可灵活控制C++中sort函数的排序逻辑,支持函数指针、仿函数和Lambda表达式三种方式。1. 函数指针适用于简单降序等场景,如bool cmp(int a, int b) { return a > b; }实现整数降序排列。2. 仿函数通过重载()运算符定义比较逻辑,如struct CmpByLength { bool operator()(const string& a, const string& b) { return a.length()
在C++中使用
sort函数进行自定义排序,关键在于提供一个自定义的比较规则。这个规则可以通过函数指针、仿函数(函数对象)或Lambda表达式来实现。默认情况下,sort按照元素的“小于”关系升序排列,但通过自定义比较函数,可以灵活控制排序逻辑。1. 使用函数指针定义比较规则
可以编写一个返回
bool类型的函数,接收两个参数,当第一个参数应排在第二个之前时返回true。示例:按整数降序排列
#include #include using namespace std;bool cmp(int a, int b) { return a > b; // 降序:a排在b前当a更大}int main() { vector nums = {3, 1, 4, 1, 5}; sort(nums.begin(), nums.end(), cmp); // 结果:{5, 4, 3, 1, 1} return 0;}2. 使用仿函数(函数对象)
定义一个类或结构体,重载
()运算符,使其行为像函数。示例:按字符串长度排序
struct CmpByLength { bool operator()(const string& a, const string& b) { return a.length() < b.length(); }};vector words = {"hi", "hello", "ok", "yes"};sort(words.begin(), words.end(), CmpByLength());// 结果:{"hi", "ok", "yes", "hello"}这种方式在STL中很常见,编译器通常能更好优化仿函数。
立即学习“C++免费学习笔记(深入)”;
3. 使用Lambda表达式(推荐)
C++11起支持Lambda,适合简单、局部的比较逻辑,写法简洁。
示例:对pair按第二关键字升序
vector<pair> vp = {{1,5}, {2,3}, {3,3}};sort(vp.begin(), vp.end(), [](const auto& a, const auto& b) { if (a.second != b.second) return a.second < b.second; return a.first < b.first;});Lambda避免了额外命名,代码更集中易读。
4. 注意事项与技巧
比较函数必须满足“严格弱序”:不能对相同元素返回
true,即cmp(a,a)必须为false。 若需稳定排序,可使用stable_sort,保持相等元素的原始顺序。 对自定义类型(如结构体),可在类外单独定义比较逻辑,提高复用性。 Lambda捕获列表一般为空([]),除非需要外部变量参与比较。基本上就这些。选择哪种方式取决于场景:简单逻辑用Lambda,复杂或复用多的用仿函数,传统场合可用函数指针。掌握这些方法后,
sort可以应对各种排序需求。
以上就是c++++如何使用sort函数自定义排序_C++自定义比较规则实现方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1484762.html

微信扫一扫
支付宝扫一扫