如何在有限的内存的情况下,找到大量数据中重复查询次数最多的语句

//500K内存,100万条数据,寻找里面重复查询次数最多的记录
//思想显示对100万条数据分在不同的文件中,但是在分文件中的时候,要对起进行一定处理,分到对于的文件中,比如分成100个
//文件,那么对每一条string进行hash得到的整数值%100,这样就分到不同的文件中了,然后确保其他文件中没有这一条记录,
//然后对每一个文件进行处理,采样hash值,然后存入相应的文件中。
//然后对每一个文件中数据进行快速排序,存入数据,这样保证数据最大的在前面。
//然后对所有文件的第一个数,进行排序,这样就能够得到最大的那条记录了。
#include 
#include //wenjian
#include 
#include //stringstream
#include //undered_map
#include //sort()
#include //pair()
using namespace std;

//产生100万条数据,随机。保存在data.txt中
bool Generate_Data()
{
ofstream outfile("data.txt");
if(outfile.fail()){
cout<<"Open file failed!"< &x, const pair &y)
{
return x.second > y.second;
}

//对100万行分别hash,然后根据hash值分50组
bool Split_Into_Groups(string &str)
{
ifstream infile(str);
if(infile.fail()){
cout<<"Open file failed!"<>name_num;
file_name = name_num + ".txt";
outfile[i].open(file_name);
if(outfile[i].fail()){
cout<<"Open file failed"<>name_num;
file_name = name_num + ".txt";
outfile[i].close();
}
//文件去重;
for(int i = 0; i < 50; ++i){
ss.clear();
ss<>name_num;
file_name = name_num + ".txt";
infile.open(file_name);
if(infile.fail()){
cout<<"Open file failed!"<::const_iterator got;
unordered_map word_num;
int k = 0;
while(getline(infile,tmp)){
k = 0;
got = word_num.find(tmp);
if(got == word_num.end()){
word_num.insert(make_pair(tmp,1));

}
else
++word_num[tmp];
}
infile.close();
outfile[i].open(file_name);
if(outfile[i].fail()){
cout<<"Open file failed"<> pair_vec;
for(unordered_map::iterator it = word_num.begin(); it != word_num.end(); ++it){
pair_vec.push_back(make_pair (it->first,it->second));
}
sort(pair_vec.begin(),pair_vec.end(),mysort);
for(vector>::iterator it = pair_vec.begin(); it != pair_vec.end(); ++it){
outfile[i]<first<<" "<second<> res;
for(int i = 0; i < 50; ++i){
ss.clear();
ss<>name_num;
file_name = name_num + ".txt";
infile.open(file_name);
if(infile.fail()){
cout<<"Open file failed!"<(tmp1,num));
}
infile.close();
}
sort(res.begin(),res.end(),mysort);
for(vector>::iterator it = res.begin(); it != res.end(); ++it){
outfile<first<<" "<second<



你可能感兴趣的:(大数据,C++)