bitset位图的介绍与使用

news2025/1/11 18:33:28

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

文章目录

  • bitset的介绍
    • 位图的引入
    • 位图的概念
    • 位图的应用
  • bitset的使用
    • bitset的定义方式
    • bitset的成员函数
    • 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开始
	bs.set(4);//第四位设置为1
	cout << bs << endl;//00010100

	bs.flip();//将所有位都翻转 11101011
	cout << bs << endl;
	cout << bs.count() << endl;//输出多少位是1的个数  6

	cout << bs.test(3) << endl;//输出第三位是什么0/1  1
	
	bs.reset(0);//清空第0位
	cout << bs << endl;//11101010
	
	cout << bs.size() << endl;//输出有多少位位图  8
	
	bs.reset();//将所有位都清空 00000000
	cout << bs.none() << endl;//如果没有位被设置了,就返回1   1

	bs.set();//设置所有的位置  全部位都为1   11111111
	cout << bs.all() << endl;//如果所有的位都被设置了,就返回1  1
	
}


//bitset运算符的使用
void test02()
{
	//1.对于>>,<<运算符的使用
	bitset<8> ag;
	cin >> ag; //输入10101010
	cout << ag << endl;//10101010
	
	//2.=、==、!=、&=、|=、^=、<<=、>>=、~ 的使用
	bitset<8> ag1(string("10101000"));
	bitset<8> ag2(string("10101000"));
	ag1 >>= 1; //ag1向右移动一个bit
	cout << ag1 << endl;//01010101

	ag2 |= ag1; //10101010 | 01010101
	//10101010  
	//01010101
	//11111111
	cout << ag2 << endl;//11111111


	//3.bitset位运算符的使用 & | ^
	bitset<8> bs1(string("11101000"));
	bitset<8> bs2(string("00010111"));
	
	cout << (bs1 & bs2) << endl;//00000000
	cout << (bs1 | bs2) << endl;//11111111
	cout << (bs1 ^ bs2) << endl;//00000000


	//4.bitset中[]运算符的使用
	bitset<4> p1(string("1011"));
	cout << p1[0] << endl;//1
	p1[1] = 0;//1001
	cout << p1 << endl;//1001

}
int main()
{
	test01();
	test02();
	return 0;
}

如有错误,多多指教!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/94702.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

传奇GEE引擎微端架设教程

传奇GEE引擎微端架设教程 GEE引擎架设微端需要准备好微端程序&#xff0c;用网站下载在服务器的版本 Mirserver文件一般都是自带微端程序的&#xff0c;偶尔也有版本没有微端程序那我们只需要到别的版本或者资源把微端程序拉到我们的文件夹里面D&#xff1a;\Mirserver 这个就…

MyBatisPlus常用注解

MyBatisPlus常用注解 TableName&#xff1a;自定义表名 给User实体类添加注解 aplication.yml中添加mp的配置 # 配置mp的日志 mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl# 设置MyBatis-Plus的全局配置global-config:db-config:table…

java基础巩固-宇宙第一AiYWM:为了维持生计,架构知识+分布式微服务+高并发高可用高性能知识序幕就此拉开(三:注册中心balabala)~整起

比如咱们作为客户端进行购物时&#xff0c;那么多服务提供者【服务提供者有很多实例&#xff0c;可能人家已经搞了拆分模块后的分布式集群&#xff0c;那实例就不少啦】&#xff0c;如果用非技术的眼光看就是&#xff0c;你提供多个&#xff0c;我挑一个买&#xff0c;咱们的访…

立足浙江 辐射全国 护航数字经济发展|美创科技亮相首届数贸会

12月11日-14日&#xff0c;首届全球数字贸易博览会在杭州隆重召开。作为国内唯一经党中央、国务院批准的以数字贸易为主题的国家级、全球性专业博览会&#xff0c;首届数贸会由浙江省人民政府和商务部联合主办&#xff0c;杭州市人民政府、浙江省商务厅和商务部贸发局共同承办。…

EtherCAT设备协议详解二、EtherCAT状态机及配置流程

EtherCAT状态机&#xff08;ESM&#xff09; EtherCAT状态机定义了每个EtherCAT从站设备的分步设置&#xff0c;并指示了可用的功能。设备可以拒绝来自主站的状态请求&#xff0c;并通过错误指示&#xff08;AL 状态寄存器中的错误标志&#xff09;和相关错误代码&#xff08;A…

Linux高级 I/O

目录 一、五种I/O模型 1. 阻塞式I/O 2. 非阻塞式I/O 3. I/O复用&#xff08;多路转接&#xff09; 4. 信号驱动式I/O 5. 异步I/O 二、五种I/O模型的比较 三、I/O复用典型使用在下列网络应用场合 一、五种I/O模型 阻塞式I/O非阻塞式I/OI/O复用&#xff08;多路转接&a…

ios 计算label宽度方法效率对比

方式1&#xff1a; 设置好label的文字&#xff0c;字号等属性后&#xff0c;调用 self.label.text "111"; self.label.font [UIFont systemFontOfSize:17]; [self.label sizeToFit]; 方式2&#xff1a; 使用字符串的方法计算文字宽度&#xff0c; - (CGRect)boun…

TheFuck—Python写的超实用命令纠正工具

序言 哈喽兄弟们&#xff0c;我们在学习Python的过程中&#xff0c;有这么一款工具&#xff0c;可以轻松纠正我们写错的命令&#xff0c;简直太好用了~ The Fuck 是一款功能强大的、Python编写的应用程序&#xff0c;可用于纠正控制台命令中的错误&#xff0c;非常强大。此外…

Linux多线程(二):线程控制

文章目录一、前言二、认识线程控制函数1.线程创建2.线程退出3.线程等待4.查看线程id5.线程分离6.综合demo三、线程id本质是地址&#xff1f;一、前言 上篇博客谈到&#xff0c;Linux并没有真线程&#xff0c;而是通过复用进程的数据结构来模拟实现线程的。因此 Linux 自然不会提…

所有的为时已晚都是恰逢其时,社科院与杜兰大学金融管理硕士邀你在职读研

最近有咨询的同学询问&#xff0c;我年龄快35岁了读研晚吗&#xff1f;记得在网上看到过一句话&#xff0c;你觉得为时已晚的时候&#xff0c;恰恰是最早的时候。你可以确定一下你的内心&#xff0c;是不是真的想读研&#xff0c;既然迟早要读的话&#xff0c;与其等到了40、50…

ISO 15765-2协议分享(一)- TP时间参数详解

文章目录 前言一、时间参数协议定义二、使用步骤 1.引入库2.读入数据总结前言 无大志者常立志,让自己生活中时时有目标,有努力的方向。 老规矩,正文前分享喜欢的文字: 生活中,你越是去竭力回避不适的感觉,就越是难以推进生活中的重要转变。 不回避,积极面对,是提升自…

蓝奥声网关为什么会受到广大用户的欢迎?

蓝奥声GP20蓝牙网关是一款支持无线和有线连接的智能网关&#xff0c;配有独特的网口驱动&#xff0c;支持带有TCP/IP的以太网接口。用于互联网访问和与主机服务器的通信&#xff0c;用于远程命令和本地处理数据的数据上传/下载。它支持 RJ45/POE 和 WiFi 两种网络角色。 GP20蓝…

点面科技荣获优胜企业奖,圆满从2022“创·在上海”国际创新创业大赛之“创·加速营”毕业

创在上海 赢在未来 “创在上海”国际创新创业大赛暨中国创新创业大赛 (上海赛区) 是一项具有广泛影响力的创新创业活动。 为提升入围全国赛的参赛企业的参赛能力&#xff0c;“创在上海”将充分整合和调动多方资源&#xff0c;结合国赛进程&#xff0c;创新推出针对入围国赛企…

Git常用命令总结

配置git 本地创建 ssh key&#xff1a; ssh keygen -t rsa -c “email” // email:github上注册用的邮箱 把上面生成的 key 粘贴到 gitHUb中的 sshkey中 验证 是否成功 ssh -T gitgithub.com 如果是第一次的会 提示 是否continue &#xff0c;输入 yes 就会看到 You’ve succe…

Springboot健康上报小程序: element后台管理系统(完整代码)

这几天接到了个学生的需求&#xff0c;挺简单的&#xff0c;大概就是按照她的需求做一个疫情期间常态化管理的小程序&#xff0c;由于我对java不熟悉&#xff0c;基本上是边做边学&#xff0c;这里我将对本次项目做个记录 ✨✨欢迎订阅本专栏或者关注我&#xff0c;大家一起努力…

内科大机器学习框架课程重点内容笔记

文章目录一.背景二.内容一.背景 这是2020届内科大机器学习框架课程的考试复习内容 二.内容 1.变量间的相互关系&#xff1a; (1)确定性关系或函数关系&#xff1a;研究的是确定现象非随机变量间的关系。 (2)相关关系或统计依赖关系&#xff1a;研究的是非确定现象随机变量间…

计算机毕设Python+Vue校园一卡通管理系统(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

外滩金融峰会公布“第七届融城杯十佳案例”,工行、创邻科技等成功上榜

12月11日&#xff0c;由中国金融四十人论坛&#xff08;CF40&#xff09;主办的第四届外滩金融峰会在上海召开。国家副主席王岐山为峰会致开幕辞&#xff0c;中国人民银行原行长周小川、上海新金融研究院理事长屠光绍、中国人民银行副行长宣昌能、中央财经委员会办公室副主任尹…

存储mybatis的xml标签,动态sql 查询

前言&#xff1a; 通过表动态存储mybatis 的xml标签&#xff0c;通过动态sql 入参查询&#xff0c;方便更新查询逻辑&#xff0c;无需发版即可&#xff1b;&#xff08;当前用的是 mybatis-plus &#xff0c;db用的是oracle【这个无所谓】&#xff09; 注意事项&#xff1a;这…

【C】带你复习有趣的函数

作者 &#xff1a;会敲代码的Steve 墓志铭&#xff1a;博学笃志&#xff0c;切问静思。 前言&#xff1a;本文旨在总结C语言函数章节的知识点、分为以下九个模块、分别是&#xff1a; 1.函数是什么 2.库函数 3.自定义函数 4.函数参数 5.函数调用 6.函数的嵌套调用和链式…