std::sort 的注意事项
\(\Large{AC}\) 代码:
#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;
}
\(\Large{TLE}\) 代码:
#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;
}
有木有发现就是第 \(5\) 行的 < 与 <= 的区别...
这是由于 std::sort 中 cmp(x,y) 类似于:
现在
x在y后(右)边,cmp返回x是否应该超到y的前(左)边。
那为什么 <= 会 \(\Large{TLE}\) 呢?
由于 std::sort 中的某些蜜汁操作,当有两个值相同的元素 \(x,y\) 时,程序里会反复交换 \(x,y\),导致 \(\Large{TLE}\)。
所以啊,
写 std::sort 的 cmp 时,若两个元素判定为相同的,请务必输出
\[\Large{False}
\]
作者:ShaoJia,欢迎分享本文,转载时敬请注明原文来源链接。

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号