c++ 的vector sort遇到栈错误

在做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;
}

posted @ 2018-03-23 17:14  凌乱533  阅读(191)  评论(0编辑  收藏  举报