位图:位图的原理就是用一个bit来标识一个数字是否存在,采用一个bit来存储一个数据,所以这样可以大大的节省空间。
例如一个int型有32bit,那么就可以用这32个bit来存储0~31这些整型数据,所以可以将1~31这些数据仅用1个bit来存储,这样节省了空间。
例如要存储3,7,4,8
主要把握的是映射关系
代码实现:
class BitMap
{
public:
BitMap(int n)
{
_b.resize((n>>5) + 1);//n>>5等价于n/32
}
void Set(int x)//插入
{
int d = x/32;
int num = x%32;
_b[d] |= (1 << num);
}
void Reset(int x)//删除
{
int d = x/32;
int num= x % 32;
_b[d] &=~(1<<num);
}
bool Test(int x)//检查
{
int d = x / 32;
int num = x % 32;
return _b[d] &=(1 << num);
}
private:
vector<int> _b;
};
/*********************************/
void test()
{
BitMap b(100);//假设有100个数
b.Set(11);
b.Set(21);
b.Set(31);
b.Set(41);
cout << b.Test(41) << endl;//查找41是否存在于这100个数当中
cout << b.Test(22) << endl;
}