前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sort+结构体实现二级排序

sort+结构体实现二级排序

作者头像
用户1215536
发布2018-02-05 14:32:04
5120
发布2018-02-05 14:32:04
举报

之前介绍的sort函数由于其效率较高,使用较为简单让我用起来那叫一个爽,今天再写一篇使用sort+结构体实现二级排序的方法。

还是先想个问题吧,比如我想输入5个同学的名字和身高,然后得到他们身高的降序,但是如果出现相同身高的情况,名字的拼音靠前的排在前面。

好,现在这个问题已经涉及到了二级排序,要按照身高的降序和姓名的升序排列,那么就要先定义一个结构体,将姓名和身高都包含进去,然后用sort对结构体排序,而实现二级排序,关键在于自己写的cmp函数(sort的比较方法)

代码语言:javascript
复制
 1 #include<iostream>
 2 #include<string>
 3 #include<algorithm>
 4 using namespace std;
 5 struct Person
 6 {
 7     string name;
 8     int hegh;
 9 };
10 bool cmp(Person p1,Person p2)
11 {
12     if(p1.hegh>p2.hegh)//一级排序
13     {
14         return true;
15     }
16     else
17     {
18         if(p1.hegh==p2.hegh)
19         {
20             if(p1.name<p2.name)//二级排序
21             {
22                 return true;
23             }
24             else
25             {
26                 return false;
27             }
28         }
29         else
30         {
31             return false;
32         }
33     }
34 }
35 int main()
36 {
37     Person p[5];
38     for(int i=0;i<5;i++)
39     {
40         cin>>p[i].name>>p[i].hegh;
41     }
42     cout<<"排序前:"<<endl;
43     for(int i=0;i<5;i++)
44     {
45         cout<<p[i].name<<" "<<p[i].hegh<<endl;
46     }
47     sort(p,p+5,cmp);
48     cout<<"排序后:"<<endl;
49     for(int i=0;i<5;i++)
50     {
51         cout<<p[i].name<<" "<<p[i].hegh<<endl;
52     }
53     return 0;
54 }

下面来个稍微复杂一点的应用

如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。

实现以下接口: 输入一个字符串,对字符中的各个英文字符,数字,空格进行统计(可反复调用) 按照统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASII码由小到大排序输出 清空目前的统计结果,重新统计

思路:先构造hash表统计字符出现的次数,然后对hash表进行二级排序

代码语言:javascript
复制
#include<iostream>
#include<string>
using namespace std;
int main()
{
    int num;
    string str;
    string s;
    cin>>num;
    while(num-->0)
    {
        cin>>s;
        if(!str.empty())
        {
            str=str+s;
        }
        else
        {
            str=s;
        }
        if(str.length()==8)
        {
            cout<<str<<endl;
            str.clear();
        }
        else if(str.length()<8)
        {
            str.insert(str.length(),8-str.length(),'0');
            cout<<str<<endl;
            str.clear();
        }
        else if(str.length()>8)
        {
            cout<<str.substr(0,8)<<endl;
            str=str.substr(8,str.length()-8);
            break;
        }
    }
    if(!str.empty())
    {
        str.insert(str.length(),8-str.length(),'0');
        cout<<str<<endl;
    }
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-04-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档