#include<iostream>
#include<cstring>
using namespace std;
#define MAX 100000
unsigned array[MAX];
void init()
{
memset(array, 0, MAX * sizeof(unsigned));
}
void set(unsigned i)
{
array[i >> 5] |= 0x01 << (i & 31);
}
bool test(unsigned i)
{
return array[i >> 5] & (0x01 << (i & 31));
}
void clear(unsigned i)
{
array[i >> 5] &= ~(0x01 << (i & 31));
}
int test_bit(unsigned i)
{
unsigned e = i << 1;
if(!test(e) && !test(e + 1))
return 0;
else if(test(e) && !test(e + 1))
return 1;
else if(!test(e) && test(e + 1))
return 2;
else
return 3;
}
void set_bit(unsigned i)
{
unsigned e = i << 1;
if(test_bit(i) == 0)
set(e);
else if(test_bit(i) == 1)
{
set(e + 1);
clear(e);
}
}
void clear_bit(unsigned i)
{
unsigned e = i << 1;
clear(e);
clear(e + 1);
}
int main()
{
init();
int a[] = {4, 1, 1, 38, 999, 43, 999, 3, 48, 48};
int i;
for(i = 0; i < 10; i++)
set_bit(a[i]);
for(i = 0; i < 1000; i++)
{
if(test_bit(i) == 1)
cout << i << endl;
}
return 0;
}
2-bitmap实现海量数据查找不重复数据
最新推荐文章于 2022-12-04 21:08:54 发布