给定一个乱序的数组,删除所有的重复元素,使得每个元素只出现一次,并且按照出现的次数从高到低进行排序,相同出现次数按照次出现顺序进行先后排序。
[输入描述:
一个数组
输出描述:
去重排序后的数组
示例1
输入:
1,3,3,3,2,4,4,4,5
输出:
3,4,1,2,5
备注:
数组大小不超过100
数组元素值大小不超过100
bool compare_map(const pair<int, int>&a, const pair<int, int>&b)
{
return a.second > b.second;
}
vector<int> in{ 1,3,3,3,2,4,4,4,5 };
unordered_map<int, int> a; //无序map,不会进行排列
for (auto temp : in) //记录序列元素个数
++a[temp];
vector<pair<int, int>> vtMap;
for (auto it = a.begin(); it != a.end(); it++)
{
vtMap.push_back(make_pair(it->first, it->second));
}
stable_sort(vtMap.begin(), vtMap.end(), compare_map); //使用stable_sort,不改变原来的相对顺序,自定义比较大小
for (auto it = vtMap.begin(); it != vtMap.end(); ++it)
{
for (int i = 0; i < it->second; ++i)
{
cout << it->first << " ";
}
cout << endl;
}
for (auto it = vtMap.begin(); it != vtMap.end(); it++)
{
cout << it->first << '\t';
}