题目描述:n个数,打印出重复次数最多的前十个
方法:无序容器+优先级队列
数据结构:哈希单重映射表+优先级队列
步骤:
1、遍历所有的数,放进哈希表中
2、找到前十个重复率最高的
3、打印
#include<iostream>
#include<vector>
#include<queue>
#include<algorithm>
#include<functional>
#include<unordered_map>
using namespace std;
//自定义结构体
struct Node
{
Node(int v,int c):val(v),count(c){}
bool operator>(const Node& src)const
{
return count>src.count;
}
int val;//放置数据
int count;//放置数据次数
};
int main()
{
vector<int>vec;
for(int i=0;i<200000;++i)
{
vec.push_back(rand()+i);
}
unordered_map<int,int>mmap;
for(int i:vec)
{
//mmap.insert(make_pair(i,1));
mmap[i]++;//[]运算符重载 查到数据则返回数据然后加一,没有查到,添加数据然后加一返回
}//查重完
priority_queue<Node,vector<Node>,greater<Node>> qq;
int i=0;
auto it=mmap.begin();
for(;it!=mmap.end()&& i<10;++it,++i)//插入10个
{
qq.push(Node(it->first,it->second));
}//top 10
for(;it!=mmap.end();++it)//插入一个比较一个
{
if(it->second > qq.top().count)
{
qq.pop();
qq.push(Node(it->first,it->second));
}
}
while(!qq.empty())//打印
{
cout<<qq.top().val<<":"<<qq.top().count<<endl;
qq.pop();
}
return 0;
}