std::sort 的注意事项
代码:
#include<bits/stdc++.h> using namespace std; int n,a[100010]; bool cmp(int x,int y){ return x<y; } signed main(){ cin>>n; for(int i=0;i<n;i++) cin>>a[i]; sort(a,a+n,cmp); for(int i=0;i<n;i++) cout<<a[i]<<("\n "[i!=n-1]); return 0; }
代码:
#include<bits/stdc++.h> using namespace std; int n,a[100010]; bool cmp(int x,int y){ return x<=y; } signed main(){ cin>>n; for(int i=0;i<n;i++) cin>>a[i]; sort(a,a+n,cmp); for(int i=0;i<n;i++) cout<<a[i]<<("\n "[i!=n-1]); return 0; }
有木有发现就是第 行的 <
与 <=
的区别...
这是由于 std::sort
中 cmp(x,y)
类似于:
现在
x
在y
后(右)边,cmp
返回x
是否应该超到y
的前(左)边。
那为什么 <=
会 呢?
由于 std::sort
中的某些蜜汁操作,当有两个值相同的元素 时,程序里会反复交换 ,导致 。
所以啊,
写 std::sort
的 cmp
时,若两个元素判定为相同的,请务必输出
本文来自博客园,作者:ShaoJia,版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义