BitSet位图

【C++】STL详解(十三)—— bitset(位图)的介绍与使用 今天我们比较详细地学习了bitset(位图)的介绍与使用,了解了一些有关的底层原理。接下来,我们将进行bitset(位图)的模拟实现。希望我的文章和讲解能对大家的学习提供一些帮助。 阅读详情

存储空间的计算

1int为4个字节(byte)
1byte为8个 比特位(bit)
1kb = 1024 byte
1Mb = 1024 kb
1Gb = 1024Mb
1Tb = 1024Gb


位图

腾讯题:给40亿个不重复的无符号整型,没排过序。如何快速判断这个数存不存在?
如果内存允许,可以先进行排序,再用二分查找进行查找。但是40亿个无符号整型存储在内存中需要16G。
如果用位图40亿个整型需要内存为500M。

位图是一个数组的每一个数据的每一个二进制位表示一个数据,0表示数据不存在,1表示数据存在。
代码:

"BitSet.h"
#pragma once

#include <vector>

class BitSet
{
public:
    BitSet(size_t range)//构造函数
    {
        _a.resize((range >> 5) + 1, 0);
    }

    void Set(size_t num)
    {
        size_t index = num >> 5;//在哪个数中
        size_t pos = num % 32;//在哪个比特位中

        _a[index] |= (1 << pos);//将num对应的位置1
    }

    void ReSet(size_t num)
    {
        size_t index = num >> 5;
        size_t pos = num % 32;

        _a[index] &= ~(1 << pos);//将num对应的位置0
    }

    bool Test(size_t num)//测试
    {
        size_t index = num >> 5;
        size_t pos = num % 32;

        return _a[index] & (1 << pos);//如果存在,对应的位是1,&1为1,否则相反
    }

protected:
    vector<int> _a;
};

void TestBitSet()
{
    BitSet s1(-1);
    s1.Set(1);
    cout << "BitSet?:" << s1.Test(1) << endl;
    s1.Set(33);
    cout << "BitSet?:" << s1.Test(33) << endl;
    s1.Set(67);
    cout << "BitSet?:" << s1.Test(67) << endl;

    s1.ReSet(1);
    cout << "BitSet?:" << s1.Test(1) << endl;
    s1.ReSet(33);
    cout << "BitSet?:" << s1.Test(33) << endl;
    s1.ReSet(67);
    cout << "BitSet?:" << s1.Test(67) << endl;
}

"Test.cpp"
#include <iostream>

using namespace std;

#include "BitSet.h"

int main()
{
    TestBitSet();
    return 0;
}
bitset用法 bitset用法 bitset用法bitset用法bitset用法bitset用法bitset用法bitset用法 立即下载

相关推荐

UE4游戏开发:GameInstance与GameMode的实战应用与避坑指南

本文深入解析了UE4中GameInstance与GameMode的核心差异与实战应用。GameInstance作为贯穿游戏进程的全局单例,负责跨关卡数据持久化与系统管理;而GameMode则定义特定关卡内的游戏规则与逻辑,随关卡加载销毁。文章通过数据存储、动态模式切换及网络游戏等场景,提供了清晰的应用指南与常见避坑方案,帮助开发者构建更健壮的UE4游戏架构。

kubernetes8ctl的博客 230

(C++) stl之bitset 使用小结

文章目录头文件定义定义的长度足够定义的长度不够注意点操作符方法/函数to_string()to_ulong()/to_ullong()size()any()/none()test()count()flip()reset()set()END bitset是一个特殊有的stl容器,顾名思义bitset是对位比特的操作,这里专指位运算操作 头文件 #include <bitset> #include <bits/stdc++.h> 定义 debug()定义 #define debug(

cuber-lotus的博客 1547

citespace基本操作

聚类分析 时间线图 这些结果都是高被引文献的相关呈现结果,代表该领域的文献基础 下面可以看看该project的前沿领域 选择keywords 和term go! 调整显示方式 生成凸线图:表示 在某个研究领域或者时间段内 ,大家对某个领域或者某个词的关注度突然增高,凸显前沿方向的转变 以此来发现热点 ...

生信小博士的博客 1万+

bitset(C++实现)

位图实际上就是一个指定比特位个数的连续内存空间,所以可以用STL内置的容器vector管理,除此之外,理论上任何类型都可以作为元素的类型,只不过为了容易理解,它的每个元素的类型被设定为char。

Man9o 2190

SAP 采购申请、采购订单的审批策略

采购申请、采购订单的审批策略 采购申请审批 PR审批可以分为:含分类、无分类 1、无分类PR审批: A、后台配置: 设置批准代码(批准代码可以设置多级审批): 发布批准标识使用系统已有的 “2 询价/采购订单”: 新建采购申请审批策略Z1(仅设置1级审批,一共可以设置8级审......

willieyuan的博客 2万+

uniapp - 解决报错 TypeError: e[t] is not a function(Uniapp项目运行或打包编译时提示错误e[t] is not a function,全平台端均可搞定)

uniapp,报错,TypeError: e[t] is not a function,uniapp App端报错,Android端,苹果ios打包报错,运行报错,uniapp打包报错e[t] is not a function,无法运行提示错误,uniapp live-pusher直播推流,maps地图组件,uni-app live-pusher 报错TypeError: e[t] is not a function,uni-app maps报错TypeError: e[t] is not a funct

✅ 精选推荐文章 8220

STL容器 —— bitset

位图算法,位图的模拟实现,位图的应用:常见面试题-> 海量数据的处理方法。

lyzzs222的博客 1350

2015年高教社杯全国大学生数学建模竞赛 A 题:《太阳影子定位》真题解析与 MATLAB 解决方案

🏆 本文已收录于专栏:《滚雪球学数学建模(含历年真题)》,持续更新最新及历年数学建模竞赛资料,每篇内容力求做到“问题讲透、模型讲清、代码可用、论文可参考”,帮助你从零开始逐步建立完整的数学建模知识体系。

**My Coding Family** 1357

C++ bitset

C++ 中的 std::bitset 是一个固定大小的二进制位集合,每个元素只能是 0 或 1。它的大小在编译时就已经确定,可以在定义时指定大小,也可以使用默认构造函数创建一个空的 bitset,然后通过 resize() 方法重新指定大小。bitset 同时支持位运算和逻辑运算,并提供了许多实用的方法。std::bitset 作为二进制位集合,可以用于许多场景,如压缩数据、位图存储等。在实际编程中,应充分利用 std::bitset 的特性,提高代码效率和可读性。

奇妙方程式的博客 1215

实战落地!Python抓取股票历史数据:开盘/收盘/成交量全维度爬取(附数据清洗+可视化)

股票历史数据抓取的核心是“数据准确性+完整性”,网页爬取适合小批量、个性化需求,API调用适合批量、标准化需求。多市场数据抓取:适配港股(00700.HK)、美股(AAPL)的抓取逻辑;高频数据抓取:抓取分钟级、小时级行情数据,用于短线量化策略;财务数据扩展:抓取市盈率、市净率、净利润等财务指标,结合价格数据做基本面分析;量化策略回测:将清洗后的数据接入Backtrader、VNPY等量化框架,验证策略有效性。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1739

沁恒CH32V30X学习笔记02--GPIO的使用教程及2次封装驱动

刚复位后,GPIO 口运行在初始状态,这时大多数 IO 口都是运行在状态所有的 GPIO 口都可以被配置外部中断输入通道,但一个外部中断输入通道最多只能映射到一个GPIO 引脚上,且外部中断通道的序号必须和 GPIO 端口的位号一致,,两方都是一对一的关系。复用功能。

Car12 705

C++进阶(七)--STL--bitset(位图)的介绍与基本功能模拟实现

实际在这个问题当中,我们只需要判断一个数在或是不在,即只有两种状态,那么我们可以用一个比特位来表示数据是否存在,如果比特位为1则表示存在,比特位为0则表示不存在。无符号整数总共有232个,因此记录这些数字就需要232个比特位,也就是512M的内存空间,内存消耗大大减少。方式一: 构造一个16位的位图,所有位都初始化为0。方式二: 构造一个16位的位图,根据所给值初始化位图的前n位。方式三: 构造一个16位的位图,根据字符串中的0/1序列初始化位图的前n位。位图的优缺点:优点:增删查改快,节省空间。

weixin_65132948的博客 989

BMS硬件设计核心:安全、精度与EMC的工程平衡

电池管理系统(BMS)是保障锂电安全运行的关键嵌入式子系统,其本质是在高精度模拟测量、实时故障响应与复杂电磁环境适应性之间达成工程平衡。原理上,BMS依赖专用监测芯片(如BQ76920)实现微秒级硬件保护,结合主控MCU(如STM32)完成策略决策与通信管理,形成‘安全协处理器+智能主控’双架构。技术价值体现在对过压/欠压/过流/温度等多维故障的毫秒级闭环处置能力,支撑SOC/SOH估算可信度与系统鲁棒性。典型应用场景涵盖电动工具、轻型电动车及储能模块等中低串数电池组。本文聚焦BMS控制板在时钟布局、电源滤

weixin_30591519的博客 68

位图bitset的模拟实现与位运算

本文探讨C++中的位操作与位图bitset,通过介绍bitset和two_bitset类模板,将展示如何利用C++的位操作来解决实际问题,位图为处理大量数据提供了一种高效且直观的方法,无论是在内存受限的环境中处理大规模数据集,还是在日常编程中寻找优化的机会,都是一个不可或缺的工具。

螺蛳粉只吃炸蛋的走风的博客 1533

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【C++】bitset位图的使用及模拟实现

给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中? 要判断一个数是否在某一堆数中,我们可能会想到如下方法: - 将这一堆数进行排序,然后通过二分查找的方法判断该数是否在这一堆数中。 - 将这一堆数插入到unordered_set容器中,然后调用find函数判断该数是否在这一堆数中。

m0_72532428的博客 1333

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C++ bitset(位图)的介绍和使用

面试题给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。【腾讯】遍历,时间复杂度O(N)排序(O(NlogN)),利用二分查找: logN单从方法上来说这两种方法都是可以的,但是从内存上来说,这里有40亿个整数,换算一下就相当于16G,也就是说要操作这些数据的话需要占用16G的内存,内存消耗是很大的,所以从内存上来看,这两种方法都是不合适的。位图解决。

m0_74189279的博客 4256

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

bitset 位图

摘要: std::bitset是C++标准库提供的编译期固定大小位容器,具有极致空间效率(1字节存储8位)和硬件级位运算性能。其核心优势包括:节省7/8存储空间(相比bool数组)、直接映射CPU位操作指令、栈存储无堆开销。适用于位图索引(百万级ID去重)、网络协议解析(TCP标志位处理)、服务状态管理等场景。与vector<bool>相比,bitset性能更高但大小固定;动态大小需求建议使用boost::dynamic_bitset。使用时需注意:[]操作不检查越界、大小必须是编译期常量、位序

m0_62807361的博客 718

位图算法和BitSet

位图算法和BitSet 位图算法 位图算法其实就是用一个bit位来映射一个数据,比如一个int类型的数据,需要4byte,而使用位图算法只需要一个位bit,只需要int的1/32。 用于处理大数据量的排序,判断某个数是否在在某个数组中,数组中是否有重复数据。 jdk实现了一个BitSet。 java中的BitSet BitSet是位操作的对象,值只有0或1即false和true,内部维护了一个lo...

longcm的博客 265

bitset(位图)原理与用法

文章目录Bitset基础Java的Bitset使用场景解析参考 分享自我的微信订阅号“猿in”,可以搜索关注。 Bitset基础 介绍 bitset(bitmap)也就是位图,由于可以用非常紧凑的格式来表示给定范围的连续数据而经常出现在各种算法设计中。 类实现了一个按需增长的位向量。位 set的每个组件都有一个boolean值。用非负的整数将BitSet的位编入索引。可以对每个编入索引的位进行测试...

前G厂程序员/架构/产研经理,AI 进化派,一线 OPC 实践者。 持续分享编程、职场、AI、副业/创业干货~ 1万+

【C++】哈希的应用——bitset(STL)位图

我们在判断一个数据是否在给定的整形数据中,结果只有在或者不在这两种状态,那么就可以使用一个二进制比特位来代表数据是否存在的信息,如果二进制比特位为1,代表存在,为0代表不存在。这里我们采用直接定址法的哈希,用一个比特位标识映射值在不在,这就是位图。

m0_64224788的博客 2557

【C++】 bitset(位图)的使用

bitset(位图)的基本使用

M的博客 2028

C++ 位图 bitset

N是一个非类型模板参数,表示这个。

Forward♞的博客 807

golang实现位图(BitSet)

一, 概念      Bitmap (位图)是一个十分有用的数据结构。所谓的 Bit-map 就是用一个 bit 位来标记某个元素对应的 Value,而 Key 即是该元素。由于采用了 Bit 为单位来存储数据,因此在内存占用方面,可以大大节省。(《编程珠玑》第一章引入的问题,提到了 Bitmap) 二, 实现基本原理      类似于java的BitSet, 是位操作的对象

kdpujie的专栏 4689

BitSet—位图

介绍了位图的模拟实现, 如何利用位图进行排序

m0_74365243的博客 644

31.位图bitset

位图概念 所谓位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的 使用方式: #include #include using namespace std; int main() { bitset<10> bt; cout << bt << endl; cout <<"size:"&lt...

qq_43808700的博客 255

BitSet位图算法

    位图算法,使用bit存储数据并排序,优点是快速、占用资源少,缺点是只能对整数使用。     Java和C++中都有已经实现的的BitSet类,可以直接使用。     举个例子,0到10000中随机出1000个数,然后用位图算法排序:     import java.util.BitSet; public class BitSetDemo { public sta...

封碎 384
上一篇: HashTable哈希表/散列表(哈希桶)
下一篇: 智能指针
simplehap
博客等级 码龄10年 16粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值