sort自定义cmp函数

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 

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

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

猜你喜欢

转载自www.cnblogs.com/upstart/p/8982167.html
今日推荐