bitset位图的介绍与使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


bitset的介绍

如果有40亿个不重复的无符号的整数,乱序,给出一个无符号的整数,如果快速判断那个数是否在这其中呢?
1.要判断一个数,无非就是把这些数排序,然后二分查找
2.或者是放入unordered_set容器中,然后使用find查找
这两种方法前者的效率是O(NlogN) 后者是O(lN)

但是麻烦的就是这40亿个数,我们必须要将这些数全部保存到内存当中去,这就要消耗大约16G的内存,空间消耗太大了,单从空间消耗上去看这两种方法都是不可行的。

所以就要用到了位图

位图的引入

在这里插入图片描述
无符号整数的个数是2^32
就需要2^32个比特位,才占内存512M的内存空间,相比较与16G大大缩小了,所以空间效率达到质的飞跃

位图的概念

位图,就是每一个比特位来存放某一状态,适用于海量的数据,以及无重复数据的场景。通常是用来判断某一数据是否存在.

位图的应用

常见的位图的应用如下:
1.快速查找某一个数据是否在某个集合中
2.排序
3.求两个集合的交集或者并集等等
4.操作系统中磁盘块标记
5.内核中信号标志位(信号屏蔽字和未决信号等等)

bitset的使用

bitset的定义方式

方式一:bitset<8> ag;//00000000
构造一个8位的位图,所有位都初始化为0
方式二:bitset<8> ag(2);//00000010
构造一个8位的位图,所有位构成初始化为2
方式三:bitset<8> ag(string("10101010")
构造一个8位的位图,所有位根据string的0/1序列初始化位图的前n位, string的size比bitset的size小,就前面补0,大就取前bitset.size位

bitset的成员函数

bitset运算符的使用

在这里插入图片描述
使用示例:

#include<bitset> //使用位图头文件

//位图的介绍与使用
void test01()
{
   
	bitset<8> bs;//设置8位的位图  00000000全部初始化为0
	bs.set(2)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
bitsetC++标准库中的一个类,用于表示固定大小的位集合。它可以用来进行位运算和位操作。对于bitset的交集操作,可以使用位运算符&来实现。假设有两个bitset对象bitset1和bitset2,可以使用以下代码计算它们的交集: ```cpp bitset<32> bitset1; // 假设bitset1是一个32位的bitset对象 bitset<32> bitset2; // 假设bitset2是一个32位的bitset对象 bitset<32> intersection = bitset1 & bitset2; // 使用位运算符&计算交集 int count = intersection.count(); // 计算交集中为1的位的个数 ``` 上述代码中,bitset1和bitset2是两个位集合,通过使用位运算符&计算它们的交集。交集的结果存储在intersection中。可以使用count()函数来计算交集中为1的位的个数。请注意,bitset的大小需要在创建对象时指定,上述代码中假设bitset的大小为32位。 #### 引用[.reference_title] - *1* [BitSet---最快求交集差集等的类](https://blog.csdn.net/Fire_Sky_Ho/article/details/123855704)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【C++bitset(位图)的使用](https://blog.csdn.net/sjsjnsjnn/article/details/128519935)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值