BitMap的原理及使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qingqiulengya/article/details/51615307
位图:位图的原理就是用一个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;
}




阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页