如何解决使用stl按元素频率的升序对向量进行排序
我正在尝试按频率递增的顺序对整数向量进行排序。我已经声明了一个存储整数计数的全局映射,并已在自定义比较器中使用它,但是我得到了错误的答案。在联机检查(here)时,我发现使用看起来不错的实现对。我在做什么错了?
#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出现两次,因此您有两组等效值。您没有在这些组中定义任何顺序。 因此输出结果并不令人惊讶
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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。