目录:
程序代码
问题:
解决思路:
第一次我用的是构造函数然后怎么都弄不好,突然想到map函数有影射的功能,刚好实现对重复出现的数字一次性计数,思路简单好理解。因为我是做了两三遍才突然想起这个办法更方便,一是想巩固,其次想与大家一起进步。。。。。
程序代码
#include<iostream>
#include<string.h>
#include<algorithm>
#include<queue>
#include<map>
using namespace std;
struct number
{
int num;
int acount;
};
bool mycomp(number a,number b)
{
if(a.acount!=b.acount)
{
return a.acount>b.acount;
}
else
{
return a.num<b.num;
}
}
int main()
{
int n;
cin>>n;
map<int,int>mp;
int *a=new int [n];
int k=0;
for(int i=0;i<n;i++)
{
cin>>a[i];
mp[a[i]]++;
}
sort(a,a+n);
for(int i=0;i<n;i++)
{
if(a[i]!=a[i+1])
{
k++;//为后面的新被赋值的构造数组提供空间长度。
}
}
number*b=new number[k];
int t=0;
for(map<int,int>::iterator it =mp.begin();it!=mp.end();it++)//因为不知道map函数按照第二个元素怎么排序就进行了赋值
{
b[t].num=it->first;
b[t].acount=it->second;
t++;
}
sort(b,b+k,mycomp);
for(int i=0;i<k;i++)
{
cout<<b[i].num<<" "<<b[i].acount<<endl;
}
return 0;
}
结果:
相互学习,相互纠正咯!