STL初养成-multimap--学生成绩管理系统

#include <iostream>
#include <map>
#include <cstring>
using namespace std;
struct StudentInfo
{
    int id;
    char name[20];
};
struct Student
{
    int score;
    StudentInfo info;
};
typedef multimap<int, StudentInfo> MAP_STD;

int main()
{
    MAP_STD mp;
    Student st;
    int score;
    char cmd[20];
    while (cin >> cmd)
    {
        if (cmd[0] == 'A')
        {
            cin >> st.info.name >> st.info.id >> st.score;
            mp.insert(make_pair(st.score, st.info)); // mp只能插入pair
        }                                            // first等于 st.score  ,second等于st.info
        else if (cmd[0] == 'Q')
        {
            int score;
            cin >> score;
            MAP_STD::iterator p = mp.lower_bound(score);

            if (p != mp.begin()) //如果score不是最低分
            {
                p--;              // p指向比socre低的 最高分
                score = p->first; // score 是比查询分数低的最高峰
                MAP_STD::iterator maxp = p;
                int maxId = p->second.id; //记录当前p所指向的学号
                for (; p != mp.begin() &&
                       p->first == score;
                     p--)
                {
                    //遍历所有成绩和score相等的学生
                    if (p->second.id > maxId)
                    {
                        maxp = p;
                        maxId = p->second.id; //成绩相等 就比较学号
                    }
                }
                if (p->first == score) //上面循环是因为p ==mp.begin()终止的
                {
                    if (p->second.id > maxId)
                    {
                        maxp = p;
                        maxId = p->second.id;
                    }
                }
                cout << maxp->second.name << " "
                     << maxp->second.id << " "
                     << maxp->first << endl;
            }
            else
            {
                cout << "Nobody" << endl;
            }
        }
        else if(cmd[0] == 'E'){
            cout<<"exit successfully"<<endl;
            break;
        }
        else{
            cout<<"input error"<<endl;
        }
    }
    system("pause");
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值