2.5亿个数据,统计不重复的数据。
bitmap
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <fstream>
#include <conio.h>
#include <ctime>
#define MAXN 20000000
#define setone(a,i) (a|0x0001<<2*i)
#define settwo(a,i) (a|0x0003<<2*i)
using namespace std;
char *path = "d:/test/tmpcolin.dat";
int tarray[MAXN]={0};
//int comp[100];
int view(int a,int i)
{
return a>>(2*i) & 0x0003;
}
// 生成一定数据
void generatedata()
{
fstream file(path,ios::in|ios::out|ios::binary);
srand((unsigned)time(NULL));
for(int i=0; i<20; ++i)
{
int x = (double)rand()/RAND_MAX * 100;
file.write((char*)&x,sizeof(int));
comp[i] = x;
}
file.close();
}
// 模拟处理
void processint(int i)
{
int j = i / 16;
i = i % 16;
if(view(tarray[j],i)==0)
tarray[j] = setone(tarray[j],i);
else if(view(tarray[j],i)==1)
tarray[j] = settwo(tarray[j],i);
}
void initialarray()
{
int x;
fstream file(path,ios::in|ios::out|ios::binary);
while(file.read((char*)&x,sizeof(int))){
processint(x);
//cout<<x<<" ";
}
//cout<<endl;
file.close();
}
int main()
{
generatedata();
initialarray();
//sort(comp,comp+20);
//for(int i=0;i<20;++i)
// cout<<comp[i]<<" ";
//cout<<endl;
bool ma = 1;
for(int i=0;i<MAXN;++i)
{
for(int j=0;j<16;++j)
if(view(tarray[i],j)==1){
cout<<i*16+j<<" ";
ma = 0;
}
}
if(ma) cout<<"none";
cout<<endl;
getch();
return 0;
}