题解 | #成绩排序#

成绩排序

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;
}
华为题库题解 文章被收录于专栏

牛客华为题库的题解

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务