利用sort对结构体进行排序

我定义了一个学生类型的结构体来演示排序排序对结构体排序的用法

具体用法看代码

#include<iostream>
#include<string>
#include<algorithm>//sort函数包含的头文件
using namespace std;
//定义一个学生类型的结构体
typedef struct student
{
    string name;           //学生姓名
    int achievement;     //学生成绩
} student;


//这是函数是sort函数的第三个参数
//如果希望升序排序,就是"<",降序排列就是">"号
//如果希望用其他的参数作为排序条件,只需要把相应的条件改一下(如果改成name),这样结构体就以name作为排序标准
bool comparison(student a,student b){
    return a.achievement<b.achievement;
}



//用来显示学生信息的函数
void show(student *stu,int n)
{
    for(int i = 0; i < n; i++)
    {
        cout<<"姓名:"<<stu[i].name<<'\t'<<"成绩:"<<stu[i].achievement<<endl;
    }
}

int main()
{
    student stu[] = { {"张三",99},{"李四",87},{"王二",100} ,{"麻子",60}};
    cout<<"排序前:"<<endl;
    show(stu,4);
    sort(stu,stu+4,comparison);
    cout<<"排序后:"<<endl;
    show(stu,4);
    return 0;
}
//#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<ctime>
using namespace std;
class MyClass
{
public:
    int id;
    MyClass() {}
    MyClass(int i): id( i ) {}
    bool operator < ( const MyClass &b ) const
    {
         return id < b.id;
    }

    bool operator > ( const MyClass &b ) const
    {
         return id > b.id;
    }
};

bool compare( MyClass a, MyClass b )
{
    return a.id < b.id;
}

int main()
{
     //------------------------------------------------------------------//
    //数组
    cout<<"数组"<<endl;
    MyClass arr[10];
    srand(time(NULL));
    for( int i = 0; i < 10; i++ )
        arr[i].id = rand()%101;
    cout<<"before sort"<<endl;
    for( int i = 0; i < 10; i++ )
       cout<<arr[i].id<<ends;
        cout<<endl;

    sort(arr,arr+10,less<MyClass>());
    cout<<"after sort"<<endl;
    for( int i = 0; i < 10; i++ )
        cout<<arr[i].id<<ends;
        cout<<endl;
    //------------------------------------------------------------------//


    //------------------------------------------------------------------//
    //动态数组vector
    cout<<"动态数组vector"<<endl;
    vector<MyClass> list;
    for( int i = 0; i < 10; i++ )
        list.push_back( MyClass( rand()%101 ) );
    cout<<"before sort"<<endl;
    for( int i = 0; i < 10; i++ )
        cout<<list[i].id<<ends;
        cout<<endl;

    sort(list.begin(),list.end(),greater<MyClass>());
    cout<<"after sort"<<endl;
    for( int i = 0; i < 10; i++ )
        cout<<list[i].id<<ends;
        cout<<endl;
    //------------------------------------------------------------------//

     //------------------------------------------------------------------//
    //定义比较函数
    cout<<"定义比较函数"<<endl;
    vector<MyClass> list2;
    for( int i = 0; i < 10; i++ )
        list2.push_back( MyClass( rand()%101 ) );
    cout<<"before sort"<<endl;
    for( int i = 0; i < 10; i++ )
        cout<<list2[i].id<<ends;
        cout<<endl;

    sort(list2.begin(),list2.end(),compare);
    cout<<"after sort"<<endl;
    for( int i = 0; i < 10; i++ )
        cout<<list2[i].id<<ends;
        cout<<endl;
     //------------------------------------------------------------------//

     //------------------------------------------------------------------//
    //使得类本身就是可以比较的
    cout<<"使得类本身就是可以比较的"<<endl;
    vector<MyClass> list3;
    for( int i = 0; i < 10; i++ )
        list3.push_back( MyClass( rand()%101 ) );
    cout<<"before sort"<<endl;
    for( int i = 0; i < 10; i++ )
        cout<<list3[i].id<<ends;
        cout<<endl;

    sort(list3.begin(),list3.end());
    cout<<"after sort"<<endl;
    for( int i = 0; i < 10; i++ )
        cout<<list3[i].id<<ends;
        cout<<endl;
     //------------------------------------------------------------------//
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40794973/article/details/81224703
今日推荐