求问为什么会报错

学术版

yhxcj @ 2024-11-29 15:44:21

#include<algorithm>
#include<iostream>
#include<string>
using namespace std;
bool guize(string one,string two)
{
    return one+two<=two+one?true:false;
}
int main()
{
    int n;
    string lian[200001];
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        cin>>lian[i];
    sort(lian+1,lian+1+n,guize);
    for(int i=1;i<=n;i++)
        cout<<lian[i];
    return 0;
}

在做一道站外题时发现,以上代码在这组测试数据下会报错,但把

return one+two<=two+one?true:false;

改为

return one+two<two+one?true:false;

就不会报错,同时能AC

sort(lian+1,lian+1+n,guize);

改为

stable_sort(lian+1,lian+1+n,guize);

也可以

有没有谷友帮忙看一下,全机房的人被硬控了一个下午了。我们在Linux下的Codeblocks和Windows下的Dev上进行了测试,初步猜测是访问越界之类的问题。


by llamn @ 2024-11-29 15:46:57

sort中的cmp从来都是<


by dengchengyu @ 2024-11-29 15:50:51

std::sort 的比较函数要满足不能同时出现 cmp(x,y)=truecmp(y,x)=true


by yhxcj @ 2024-11-29 15:57:02

@dengchengyu 是不是说无论什么数据类型都要满足


|