STL之map排序

描述

STL的map中存储了字符串以及对应出现的次数,请分别根据字符串顺序从小到大排序和出现次数从小到大排序。

部分代码已经给出,请补充完整,提交时请勿包含已经给出的代码。

 

int main()
{
    map<string, int> sm;
    int n;
    cin>>n;
    while(n--)
    {
        string s;
        int x;
        cin>>s>>x;
        sm[s] = x;
    }
    SortOutput(sm);
    return 0;
}

输入 

输入数据第一行为正整数n,接下来包含n行,每行一个字符串和出现的次数。

所有字符串和次数均不相同。

输出

分别按照字符串和出现次数排序,并输出map中的键和值,每行一对。

样例输入

 5
abc 1
bcd 3
cde 2
def 5
efg 4

样例输出

 abc 1
bcd 3
cde 2
def 5
efg 4
abc 1
cde 2
bcd 3
efg 4
def 5

今天做训练赛的时候知道一道题要用map,就是不会,回来仔细学了map,它的键-值对应的关系方便解决一对一的数据,很是nice

#include <string>
#include <iostream>
#include <vector>
#include <map>
#include<algorithm>
using namespace std;
void SortOutput(map<string,int>&sm)
{
    map<string,int >::iterator it;
    vector<int> v;
    for(it=sm.begin();it!=sm.end();++it)
    {
        cout<<it->first<<" "<<it->second<<endl;//map内部默认升序排序,不能用sort
        v.push_back(it->second);
    }
    sort(v.begin(),v.end(),less<int>());//默认降序,升序用greater<int>();
    int n;
    for(int i=0;i<v.size();i++)
    {
        map<string,int>::iterator it;
        for(it=sm.begin();it!=sm.end();it++)
        {
            if(v[i]==it->second)
            {
                cout<<it->first<<" "<<it->second<<endl;//it->first访问键,it->second访问值
            }
        }
    }
}
int main()
{
    map<string, int> sm;
    int n;
    cin>>n;
    while(n--)
    {
        string s;
        int x;
        cin>>s>>x;
        sm[s] = x;
    }
    SortOutput(sm);
    return 0;
}

 

 

posted @ 2018-04-14 21:56  极限之旅  阅读(1615)  评论(0编辑  收藏  举报