BitMap的原理及使用

位图:位图的原理就是用一个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;
}




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值