帶索引的排序sort

帶索引的排序可以轉化成一下幾步:

  1. 先將(index,value)按照map中(key, value)的方法,存入map中;
  2. 再將map中的(key, value)拷貝入vector<pair<type_key, type_value>> 中;
  3. 然後自定義編寫寫stable_sort()函數中的cmp;
  4. 按照你需要的排序方法去定義cmp即可;

例如:如果統計的個數相同,則按照ASCII碼由小到大排序輸出 。如果有其他字符,則對這些字符不用進行統計。

實現以下接口:
輸入一個字符串,對字符中的各個英文字符,數字,空格進行統計(可反覆調用)
按照統計個數由多到少輸出統計結果,如果統計的個數相同,則按照ASII碼由小到大排序輸出
清空目前的統計結果,重新統計
調用者會保證:
輸入的字符串以‘\0’結尾。

#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>

using namespace std;

static bool is_bigger(const pair<char, int>& left, const pair<char, int>& right){
    return left.second > right.second;
}

int main(){
    string str;
    while(cin >> str){
        //map默認按照字典序進行排列的
        map<char, int> mm;    //mm初始話value爲0
        for(auto c : str){
            if((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') ||
              (c >= '0' && c <= '9') || c == ' '){
                mm[c]++;
            }
        }
        //利用拷貝初始化將map中的key-vaule對複製到vector中
        //因爲sort()排序只針對線性序列容器
        vector<pair<char, int>> vec(mm.begin(), mm.end());
        //sort()排序是不穩定的,也就是說不能保證相對大小的順序
        stable_sort(vec.begin(), vec.end(), is_bigger);
        
        for(auto &c : vec){
            cout << c.first;
        }
        cout << endl;
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章