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;
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM