题解 | #成绩排序#

成绩排序

http://www.nowcoder.com/practice/8e400fd9905747e4acc2aeed7240978b

#include <bits/stdc++.h>

using namespace std;

struct cmpJiangXu{
  bool operator()(const pair<string, int>& a, const pair<string, int>& b){
      return a.second > b.second;
  }  
};

struct cmpShengXu{
  bool operator()(const pair<string, int>& a, const pair<string, int>& b){
      return a.second < b.second;
  }  
};

int main(){
    int n = 0;
    //法一
    /*while(cin >> n){
        int sortWay = 0; //排序方式
        cin >> sortWay;
        //输入名字和成绩
        vector<pair<string, int>> info;
        for(int i = 0; i < n; i++){
            string name = "";
            int score = 0;
            cin >> name >> score;
            info.push_back(make_pair(name, score));
        }
        
        //排序
        //stable的函数可保证相等元素的原本相对次序在排序后保持不变
        if(sortWay == 0){
            //从高到低 降序
            stable_sort(info.begin(), info.end(), cmpJiangXu());
        }
        else if(sortWay == 1){
            //从低到高 升序
            stable_sort(info.begin(), info.end(), cmpShengXu());
        }
        
        //输出
        for(auto iter = info.begin(); iter != info.end(); iter++){
            cout << iter->first << " " << iter->second << endl;
        }
        
    }*/
    
    //法二
    while(cin >> n){
        int sortWay = 0; //排序方式
        cin >> sortWay;
        //输入名字和成绩
        map<int, vector<string>> info;
        for(int i = 0; i < n; i++){ //建立成绩和名字的映射
            string name = "";
            int score = 0;
            cin >> name >> score;
            info[score].push_back(name);
        }
        
        //排序
        if(sortWay == 0){
            //从高到低 降序
            //逆序遍历  // rbegin   rend
            //输出
            for(auto iter = info.rbegin(); iter != info.rend(); iter++){ //iter++
                for(int i = 0; i < iter->second.size(); i++){ //成绩相同时,按照输入顺序输出
                    cout << iter->second[i] << " " << iter->first << endl;
                }                
            }
        }
        
        else if(sortWay == 1){
            //从低到高 升序
            //顺序遍历
            for(auto iter = info.begin(); iter != info.end(); iter++){ //iter++
                for(int i = 0; i < iter->second.size(); i++){
                    cout << iter->second[i] << " " << iter->first << endl;
                }  
            }
        } 
        
    }
    
    return 0;
}
华为题库题解 文章被收录于专栏

牛客华为题库的题解

全部评论

相关推荐

05-20 13:59
门头沟学院 Java
米黑子米黑子:你这个成绩不争取下保研?
点赞 评论 收藏
分享
05-26 22:25
门头沟学院 Java
Java小肖:不会是想叫你过去把你打一顿吧,哈哈哈
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-07 13:35
虽然不怎么光彩,经过这件事,可能我真的要去认同“面试八股文早该淘汰!不会用AI作弊的程序员=新时代文盲!”这句话了
HellowordX:Ai的出现是解放劳动力的,不是用来破坏公平竞争环境的,这样下去,轻则取消所有线上面试,严重了会影响整个行业对所有人产生影响,企业会拉高入职考核各种离谱考核会层出不穷
你找工作的时候用AI吗?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务