您的位置:首页 > 其它

sort自定义cmp函数

2015-11-02 22:22 274 查看

1.改写comp从大到小排序。

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool comp(const int &a,const int &b)
{
return a>b;
}
int main()
{
vector<int>v;
v.push_back(13);
v.push_back(23);
v.push_back(03);
v.push_back(233);
v.push_back(113);
sort(v.begin(),v.end(),comp);//
int i=0;
for(i=0;i<5;i++)
{
cout<<v[i]<<endl;
}
system("pause");
return 0;
}


运行结果:

233

113

23

13

3

请按任意键继续…

什么会这样呢?比较时sort函数根据comp函数进行判断输的大小,系统默认a

2.对结构体排序

方法一:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct ss
{
int a,b;
};
bool comp(const ss &a,const ss &b)
{
return a.a<b.a;
}
int main()
{
vector<ss>v;
ss s1,s2,s3,s4,s5;
s1.a=4;s1.b=23;
s2.a=1;s2.b=213;
s3.a=2;s3.b=231;
s4.a=5;s4.b=123;
s5.a=3;s5.b=223;
v.push_back(s1);
v.push_back(s2);
v.push_back(s3);
v.push_back(s4);
v.push_back(s5);
sort(v.begin(),v.end(),comp);
int i=0;
for(i=0;i<5;i++)
{
cout<<v[i].a<<" "<<v[i].b<<endl;
}
system("pause");
return 0;
}


比如ss结构体中a代表的是索引号,b代表的是索引对应的值,那么我想按索引排序,通过改写comp函数即可实现。

结果:

1 213

2 231

3 223

4 23

5 123

请按任意键继续…

方法2:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct ss
{
int a, b;
bool operator < (const ss &s)const{
return a < s.a;
}

};
int main()
{
vector<ss>v;
ss s1, s2, s3, s4, s5;
s1.a = 4; s1.b = 23;
s2.a = 1; s2.b = 213;
s3.a = 2; s3.b = 231;
s4.a = 5; s4.b = 123;
s5.a = 3; s5.b = 223;
v.push_back(s1);
v.push_back(s2);
v.push_back(s3);
v.push_back(s4);
v.push_back(s5);
sort(v.begin(), v.end());
int i = 0;
for (i = 0; i<5; i++)
{
cout << v[i].a << " " << v[i].b << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: