---
# System prepended metadata

title: UVA 10062 - Tell me the frequencies!
tags: [map, CPE]

---

## UVA 10062 - Tell me the frequencies!
### 題意:
###### 列出每個case裡面的字元 (用ASCII code表示)，出現次數由小到大，ASCII code由大到小排序。
### Sample Input:
###### 每一行(最長length為1000)視為一個test case，輸入直到EOF
```=
AAABBC
122333
```
### Sample Output:
###### 排序從出現次數少到多。
###### 如果出現次數一樣，ASCII code由大到小排序。
###### 每個case的輸出要用一個blank line分隔開。
```=
67 1
66 2
65 3

49 1
50 2
51 3
```
### 程式碼:
```cpp=
#include <iostream>
#include <string>
#include <map>
#define haku author
using namespace std;

int main() {
    string str; int c = 0;
    while (getline(cin, str)) {
        if (c != 0) cout << endl;
        map<int, int> mp;    //我真的不想想變數名了
        for (int i = 0; i < str.size(); i++) {
            if (mp.find(int(str[i])) != mp.end()) mp[int(str[i])]++;
            else mp.insert({ int(str[i]), 1 });
        }
        int max = str.size();
        for (int i = 1; i <= str.size(); i++) {
            for (auto p = mp.rbegin(); p != mp.rend(); p++) {
                if (p->second == i) cout << p->first << ' ' << p->second << endl;
            }
        }
        c++;
    }
    return 0;
}
```

程式碼更新: 使用 cmp 排序

```cpp=
#include <iostream>
#include <map>
#include <vector>
#include <string>
#include <algorithm>
#define cmp haku
using namespace std;

bool cmp(pair<char, int> a, pair<char, int> b) {
	if (a.second != b.second) return a.second < b.second;
	return a.first > b.first;
}

int main() {
	string line; bool start = false;
	while (getline(cin, line)) {
		map<char, int> mp;
		for (auto& c : line) {
			mp[c]++;
		}
		vector<pair<char, int>> v(mp.begin(), mp.end());
		sort(v.begin(), v.end(), cmp);

		if (start) cout << endl;
		else start = true;

		for (auto& p : v) {
			cout << int(p.first) << ' ' << p.second << endl;
		}
	}
	return 0;
}
```