c++ 简单实现bit-map

这里主要写代码,具体原理可以查看https://blog.csdn.net/weixin_40449300/article/details/87620692

bit-map使用更少的空间,实现排序、去重

假设我们有a数组,里面存放1, 7, 9, 10, 30, 31, 32, 128, 129 这9个数字。由于这9个数字最大为129,我们可以用b[5](129/32=4,4+1=5)数组来表示这9个数字。

赋值

a[i] & 31表示a[i] % 32,对其求余;a[i] >> 5 表示 a[i]  / 32

    int a[] = {1, 7, 9, 10, 30, 31, 32, 128, 129};
    int b[5];
    memset(b, 0, sizeof(b));
    for (int i = 0; i < sizeof(a) / 4; i++)
    {
        int pos2 = a[i] & 31;
        b[a[i] >> 5] |= 1 << (a[i] & 31);
    }
    

遍历

这里有两种方法,查找也可以根据以下代码改,执行以下代码将输出“1 7 9 10 30 31 32 128 129”,也就是a数组的内容。去重可以使用两个数组,根据判断条件实现

    //方法一
    for (int i = 0; i < 130; i++)
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值