题解 | #成绩排序#

成绩排序

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

  1. 注意使用stable sort,因为如果在没有指定 string 顺序的时候,sort排序方法是不稳定的。就算score相同,基于只关注我们要的进行比较就行的思想,他也会在相等时发生顺序改变,因此要用stable sort。vector 排序,只能sort!!!!!不要构造的时候发生变化。
#include<bits/stdc++.h>

using namespace std;

struct cmpu{
    bool operator()(pair<string,int> a, pair<string,int> b){

        return a.second < b.second;//如果只关注一种或比较,直接写这个
    }

};

struct cmpd{
    bool operator()(pair<string,int> a, pair<string,int> b){

        return a.second > b.second;//如果只关注一种或比较,直接写这个
    }

};


int main(){

    int M;
    int op;
    vector<pair<string,int>> up;
    vector<pair<string,int>> down;
    while(cin>>M>>op){
        up.clear();
        down.clear();

        string s; int score;
        if(op==1){//升序

            for(int i =0; i< M;i++){
                cin>>s>>score;
                up.push_back({s,score});
            }

            stable_sort(up.begin(),up.end(),cmpu());//因为要在score一样的情况下先后顺序不变,因此需要稳定排序

            for(int i =0; i< M;i++){
                cout<<up[i].first<<" "<<up[i].second<<endl;
            }

        }else{
             for(int i =0; i< M;i++){
                 cin>>s>>score;
                 down.push_back({s,score});
            }

            stable_sort(down.begin(),down.end(),cmpd());//因为要在score一样的情况下先后顺序不变,因此需要稳定排序
            for(int i =0; i< M;i++){
                cout<<down[i].first<<" "<<down[i].second<<endl;
            }
        }


    }

}
大厂笔试题题解 文章被收录于专栏

主要是公司笔试题得一些总结

全部评论

相关推荐

不愿透露姓名的神秘牛友
今天 12:10
点赞 评论 收藏
分享
哈哈哈哈哈哈哈哈哈哈这个世界太美好了
凉风落木楚山秋:毕业出路老师不管,你盖个章他好交差就完事了,等你盖完毕业了就不关他事情了
点赞 评论 收藏
分享
06-23 11:28
门头沟学院 Java
牛客91966197...:也有可能是点拒绝的时候自动弹的话术
点赞 评论 收藏
分享
06-11 17:39
门头沟学院 Java
小呆呆的大鼻涕:卧槽,用户彻底怒了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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