multiset 的排序规则

本文介绍如何利用C++中的multiset结合自定义排序规则对结构体数组进行排序。通过示例展示了如何根据学生结构体中的绩点(gpa)字段进行降序排序,并在绩点相同的情况下按照姓名字段进行字母序排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//对结构体排序
// multiset 的排序规则, 如果两个东西的在排序方式中谁排在前面都一样,那么认为他们相等
#include<iostream>
#include<cstring>
#include<algorithm>
#include<set>
using namespace std;

struct Student
{
    char name[20];
    int id;
    double gpa;//绩点
};
Student students[] = {
    {"Jack",112,3.4},{"Mary",102,3.8},
    {"Mary",117,3.9},{"Ala",333,3.5},
    {"Zero",101,4.0},{"Cindy",102,4.8}
};

struct Rule {    //按gpa从高到低排序
    bool operator()(const Student & s1, const Student & s2){
        if(s1.gpa != s2.gpa)
            return s1.gpa > s2.gpa;
        else
            return (strcmp(s1.name, s2.name) < 0);
             //分数相等就按姓名排序
    }
};

int main()
{
    multiset<Student,Rule> st;
    for(int i = 0; i < 5; ++i)
        st.insert(students[i]);

    multiset<Student,Rule>::iterator p;//迭代器
    for(p = st.begin(); p != st.end(); p++)
        cout << p->gpa << " " << p->name
        << " " << p->id << endl;
    cout << endl;
    //来个假Mary
    Student s = {"Mary", 1000, 3.9};
    p = st.find(s);
    if(p != st.end())
        cout << p->gpa << " " << p->name
        << " " << p->id << endl;


    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值