题解 | #成绩排序#

成绩排序

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-12 17:00
门头沟学院 Java
king122:你的项目描述至少要分点呀,要实习的话,你的描述可以使用什么技术,实现了什么难点,达成了哪些数字指标,这个数字指标尽量是真实的,这样面试应该会多很多,就这样自己包装一下,包装不好可以找我,我有几个大厂最近做过的实习项目也可以包装一下
点赞 评论 收藏
分享
06-22 10:41
赣东学院 Java
程序员小白条:?周六晚上投,这是什么操作,专门找996起步的吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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