unordered_map和map的区别:
map可以根据键进行排序,本题要保留输入次序,故不适合使用map
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
struct cn{
int n;//数字
int count;//出现的次数
int index;//最初出现的顺序
};
bool com(const cn& a, const cn& b){
if(a.count != b.count){
return a.count > b.count;//次数高在前
}
else{
return a.index < b.index;//出现顺序靠前的排在前面
}
}
int main() {
string input;
getline(cin, input);
istringstream iss(input);
string token;
unordered_map<string, int> nums;//不会根据键来进行排序
//完成数字的输入
while (getline(iss, token, ',')) {
nums[token]++;
}
//存储每个数字以及出现的次数
vector<cn> arr;
int i = 0;
for(auto& it : nums){
arr.push_back({stoi(it.first), it.second, i});
}
//排序
sort(arr.begin(),arr.end(),com);
for(int i = 0;i < arr.size(); i++){
cout << arr[i].n;
if(i < arr.size() - 1){
cout << ',';
}
}
cout << endl;
return 0;
}