[英]sort vector in increasing order of frequency of elements using stl
我正在嘗試按頻率增加的順序對整數向量進行排序。 我已經聲明了一個全局的 map,它存儲整數的計數並在自定義比較器中使用它,但是我得到了錯誤的答案。 在線檢查時( 此處),我發現使用對的實現似乎工作正常。 我究竟做錯了什么?
#include <bits/stdc++.h>
using namespace std;
unordered_map<int,int> m;
bool cm(int a,int b){
if(m[a]<m[b])
return true;
return false;
}
int main(){
int n;
cin>>n;
vector<int> v(n);
for(int i=0;i<n;i++){
cin>>v[i];
m[v[i]]++;
}
sort(v.begin(),v.end(),cm);
}
您的命令表明所有以相同頻率出現的數字都是等效的。
例如,在
8 2 4 1 5 3 5 1 3
8、2 和 4 出現一次,而 1、3 和 5 出現兩次,因此您有兩組相等的值。 您在這些組中不定義任何順序。 所以 output 也就不足為奇了
8 2 4 1 5 3 5 1 3
具有先出現一次的元素,然后是出現兩次的元素,每個“部分”沒有特定的順序。
您需要一個也將值計入的排序。
像這樣:
bool cm(int a,int b){
return m[a] < m[b] || (m[a] == m[b] && a < b);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.