位图的实现
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了位图的实现相关的知识,希望对你有一定的参考价值。
哈希和位图都能迅速的查找元素
区别在于,哈希能查找并访问元素,但空间利用率不高
而位图仅能用来判断元素是否存在
下面是位图的实现:
using namespace std; class BitMap { public: BitMap(size_t n) :_size(0) { _a.resize( (n >> 5) + 1); } void Set(size_t x) { size_t index = x >> 5; size_t num = x % 32; if ((_a[index] & (1 << num)) == 0) //不存在的话,添加并增加_size { _a[index] |= (1 << num); _size++; } } void ReSet(size_t x) { size_t index = x >> 5; size_t num = x % 32; if ((_a[index] & (1 << num)) != 0) //存在的话,移除并减小_size { _a[index] &= ~(1 << num); _size--; } } bool Test(size_t x) { size_t index = x >> 5; size_t num = x % 32; return _a[index] & (1 << num); } protected: vector<size_t> _a; size_t _size; };
以上是关于位图的实现的主要内容,如果未能解决你的问题,请参考以下文章