面试被问到了,想了想似乎可以用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/