代码已经经过测试,后续待更新。
CPP文件如下:
#include "largerDataProcess_bitmap.h"
// 位图的测试代码
void largerDataProcess_bitmapCppTest()
{
bitmapOneTest();
return;
}
int bitmapOne::bitmap_init( int size, int start )
{
g_size = size/8 + 1;
g_base = start;
g_bitmap = new char[g_size];
if( g_bitmap == NULL )
return 0;
memset( g_bitmap, 0x0, g_size );
return 1;
}
int bitmapOne::bitmap_set( int index )
{
cout<<"index = "<<index<<" ";
int quo = (index - g_base)/8;
int remainder = (index - g_base )%8;
unsigned char x = (0x1 << remainder );
if( quo > g_size )
return 0;
cout<<"quo = "<<quo<<endl;
g_bitmap[quo] |= x;
return 1;
}
int bitmapOne::bitmap_get( int i )
{
int quo = (i)/8;
int remainder = (i)%8;
unsigned char x = (0x1 << remainder);
unsigned char res;
if( quo > g_size )
return -1;
res = g_bitmap[quo] & x;
return res > 0 ? 1: 0;
}
int bitmapOne::bitmap_data( int index )
{
return (index+g_base);
}
int bitmapOne::bitmap_free()
{
delete[] g_bitmap;
return 0;
}
bitmapOne::bitmapOne():g_bitmap(NULL),g_size(0),g_base(0){ }
// 第一个位图bitmapOne的测试
int bitmapOneTest()
{
bitmapOne bmOne;
vector<int> v(100,0);
for( vector<int>::iterator vi= v.begin() ; vi != v.end(); vi++ )
v[vi-v.begin()] = rand()%100;
int i;
bmOne.bitmap_init(100,0);
for( i = 0; i< 20; i++ )
{
bmOne.bitmap_set(v[i]);
}
for( i = 0; i<100; i++ )
{
if( bmOne.bitmap_get(i) > 0 )
cout<< bmOne.bitmap_data(i) << " ";
}
cout<<endl;
bmOne.bitmap_free();
return 0;
}
头文件如下:
/*参考网页如下:
* http://blog.csdn.net/gugemichael/article/details/8013150 大数据过滤及判断算法 -- Bitmap / Bloomfilter
* http://blog.csdn.net/hguisu/article/details/7880288 海量数据处理算法—Bit-Map
* http://blog.csdn.net/net_assassin/article/details/9340597 bitmap与桶方式对1000万数据进行排序
* http://blog.csdn.net/qibaoyuan/article/details/5914458 位图排序
* http://blog.csdn.net/cike211/article/details/9990365 相关应用
*/
#ifndef LARGERDATAPROCESS_BITMAP_H
#define LARGERDATAPROCESS_BITMAP_H
#include "Common.h"
void largerDataProcess_bitmapCppTest();
class bitmapOne
{
private:
char *g_bitmap ;
int g_size;
int g_base;
public:
int bitmap_init( int size, int start );
int bitmap_set( int index );
int bitmap_get( int i );
int bitmap_data( int index );
int bitmap_free();
bitmapOne();
};
int bitmapOneTest();
#endif