位图bitmap数据结构详解与实现

当数据量很大而每个数据的状态又很少的情况时候,可以用位图来设计存储数据的容器。

在地址空间中,栈是向下生长的,如果用int32_t来作为一个存储单元,则每32位可以看作一组,底层的数据结构可以连续的数组,则原本用32个字节才可以表示一个状态现在可以用一个字节表示一个状态。在数据插入位图的时候,用位或运算,在查找的时候,用位与运算。

代码如下:

#include <iostream>
#include <vector>

using namespace std;

class Bitmap {
public:
    Bitmap(int size, int _key = 32)
    {
        key = _key;
        buffer.resize(size / key + 1);
    }
    void insert(int value)
    {
        //组序号
        int seg_index = value / key;
        //具体序号
        int index = value % key;
        buffer[seg_index] |= (1 << index);
    }
    void get(int value)
    {
        int seg_index = value / key;
        int index = value % key;
        if (buffer[seg_index] & (1 << index)) {
            cout << value << " is in bitmap" << endl;
        } else {
            cout << value << "is not int bitmap" << endl;
        }
    }

private:
    vector<uint32_t> buffer;
    int key;//key个位为一组
};

int main()
{
    Bitmap b(60);
    b.insert(30);
    b.insert(60);
    b.get(30);
    b.get(60);
    b.insert(70);
    b.get(70);
    return 0;
}

 

全部评论

相关推荐

机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
07-02 22:46
门头沟学院 Java
码农索隆:hr:“管你投没投,先挂了再说”
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务