一、位图(BitSet)
1. 核心概念
- 定义:用比特位(0/1)标记数据是否存在的一种数据结构
- 映射方式:直接定址法,用
2³²
个比特位标记整数值是否存在,每个比特位对应一个整数。 - 存储效率:存储 N 个数据仅需 N/8 字节,每个整数占用1比特(而非4字节),空间压缩率高达 32倍。
- 适用场景:数据范围固定且密集的场景(如整数去重、快速查找)
2. 实现原理
定位公式:
i = x / 32
→ 确定存储的整型下标。j = x % 32
→ 确定该整型内的比特位偏移。
位操作:
- 给一个数 n ,将它的二进制表中第 x 位置1:n|=(1<<x)
- 给一个数 n ,将它的二进制表中第 x 位置0:n&=(~(1<<x))
- 给一个数 n ,判断它的二进制表中第 x 位是0还是1:
- 如果是0:(n>>x)&1=0
- 如果是1:(n>>x)&1=1
代码:
template<size_t N>
class bitset {
public: