您的位置:首页 > 大数据

【位图】--利用位图储存大数据,节省空间,快速查找

2017-08-11 16:08 274 查看


#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  位图
相关文章推荐