#include<iostream>
using namespace std;
#include<vector>
class BitMap
{
public:
BitMap(size_t MaxNum)//构造函数
{
_arr.resize((MaxNum>>5)+1);
}
void Set(size_t num)//位图中插入元素
{
size_t index=num>>5;//该元素应该插入的整形数组的位置下标
size_t bitNum=num%32;//该元素在数组中对应位置的二进制位的下标;即就是该元素在位图中对应的位的位置;
_arr[index] |=(1<<bitNum);//1或任何树都等于1,将元素对应的位图的该位置为1,表示存在
}
void ReSet(size_t num)//位图中删除元素
{
size_t index=num>>5;//数组的位置
size_t bitNum=num%32;//数组该位置对应的位
_arr[index] &=~(1<<bitNum);//0与任何数都等于0,将改为置0;表示该数不存在
}
bool Test(size_t num)
{
size_t index=num>>5;
size_t BitNum=num%32;
return _arr[index]&(1<<BitNum);
}
private:
vector<size_t> _arr;
};
int main()
{
BitMap bm((size_t)-1);
bm.Set(1);
bm.Set(100);
bm.Set(1126);
bm.Set(1121);
bm.Set(199);
cout<<bm.Test(100)<<endl;//1
cout<<bm.Test(101)<<endl;//0
cout<<bm.Test(1121)<<endl;//1
cout<<bm.Test(1129)<<endl; //0
bm.ReSet(100);
bm.ReSet(199);
cout<<bm.Test(100)<<endl;//0
cout<<bm.Test(1126)<<endl;//1
cout<<bm.Test(1121)<<endl;//1
cout<<bm.Test(199)<<endl; //0
return 0;
}
【位图】--利用位图储存大数据,节省空间,快速查找
最新推荐文章于 2023-11-08 14:41:34 发布