一个数组中最常出现的n个数

面试被问到了,想了想似乎可以用map解决,第一个保存原型,第二个保存出现的次数,在用set的比较特性,对map的迭代器进行排序,小于函数需自定义

比较函数的定义http://www.cnblogs.com/gmark/archive/2012/12/18/2822904.html

#include <set>
#include <map>
#include <iostream>
#include <ctime>
using namespace std;
class lessThan{
public:
	bool operator()(const map<int,int>::iterator &x1,const map<int,int>::iterator &x2){
		return x1->second<x2->second;
	}
};
/*
struct lessThan{
	bool operator()(const map<int,int>::iterator &x1,const map<int,int>::iterator &x2){
		return x1->second<x2->second;
	}
};*/

int main(){
    srand(unsigned(time(0)));
	set<map<int,int>::iterator,lessThan> data_set;
	map<int,int> data_store;
	pair<map<int,int>::iterator,bool> feedback;
	for(int i=0;i<10000;++i){
/*		data_set.insert(i);
		data_set.insert(i);
		data_set.insert(i);*/
		feedback=data_store.insert(map<int,int>::value_type(rand()%100,1));
		if(!feedback.second)
			++(*feedback.first).second;
	}
	map<int,int>::iterator it=data_store.begin();
	for(;it!=data_store.end();++it){
		data_set.insert(it);
		if(data_set.size()>3)
			data_set.erase(data_set.begin());
	}
	set<map<int,int>::iterator,lessThan>::iterator it2=data_set.begin();
	for(;it2!=data_set.end();++it2)
		cout<<(*it2)->first<<" "<<(*it2)->second<<endl;
//	cout<<data_store.size()<<endl;
//	cout<<data_set.count(0)<<endl;
	system("pause");
}

http://blog.163.com/xychenbaihu@yeah/blog/static/1322296552012821103039741/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值