【位图】--利用位图储存大数据,节省空间,快速查找
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; }
相关文章推荐
- 利用位图查找大数据
- 利用空间换时间来快速查找字符是否存在某个字符串里
- 二分法查找和快速排序 二分法是分治算法的一种特殊形式,利用分治策略求解时,所需时间取决于分解后子问题的个数、子问题的规模大小等因素,而二分法,由于其划分的简单和均匀的特点,是查找数据时经常采用的一种有
- SQL Server重新利用数据表的空间
- 从数据集中快速查找:dt.select("")
- 实现了一个压缩算法,在数据高度压缩的前提下,还可以快速查找 key
- 查找oracle数据文件、表空间的位置
- 2013 0314 二分查找 快速排序 空间复杂度
- 利用分类查找来快速打开某个文件夹(分类)
- 不利用View Composer技术实现Linked Clone的空间节省效果创建虚拟机
- oracle数据迁移快速导入导出:利用sqluldr2导出数据和sqlldr导入数据的方法
- 查找oracle数据文件、表空间的位置
- ORACLE空间管理实验1:探索LMT表空间管理下数据文件头的结构及位图中区的记录方式
- Androdi版Onavo利用众包的智慧帮用户节省数据流量
- 利用游标批量清空数据同时批量查询数据空间和条数
- 利用图片中的exif元数据批量查找图片中所包含的GPS信息
- 利用siezof运算现实存储各种数据类型使用内存空间的字节数
- 利用EXP/IMP进行数据迁移,如何转换表空间操作(完整版)
- 快速推进国家2000坐标系的空间数据成果基于FME的坐标转换解决方案
- 利用ASP.NET MVC和Bootstrap快速搭建个人博客之后台dataTable数据列表