簡體   English   中英

使用 stl 按元素頻率的遞增順序對向量進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM