sort自定義cmp函式
阿新 • • 發佈:2018-12-31
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;
}