在做pat乙级1082 射击比赛时 遇到了sort 段错误。
题目链接:https://www.patest.cn/contests/pat-b-practise/1082
感觉写的没啥毛病 但就是段错误 ,搜索了一下才明白,原来是sort函数在极端相等的情况下,比如比较的元素内容完全相同,sort会一直遍历下去直到越界。
我原来的写法是:
int compar(stu s1,stu s2){
return s1.juli-s2.juli;
}
记得以前这样写是没问题,还是我记错了,在java中写没问题?
反正以后记住比较器用bool返回值就好了额。。!!
#include<iostream>
#include<stdio.h>#include<algorithm>
using namespace std;
#include<vector>
#include<string>
#include<cmath>
struct stu{
string bianhao;
int x;
int y;
int juli;
};
bool compar(stu s1,stu s2){
return s1.juli>s2.juli;
}
int main(){
int k;
scanf("%d",&k);
vector<stu> vec;
for(int i=0;i<k;i++){
stu s ;
cin>>s.bianhao>>s.x>>s.y;
s.juli = s.x*s.x+s.y*s.y;
vec.push_back(s);
}
if(k==0){
return 0;
}
sort(vec.begin(),vec.end(),compar);
cout<<vec[k-1].bianhao<<" "<<vec[0].bianhao;
return 0;
}