当前位置:

首页 > 编程开发 > C++位图算法实战:std::bitset快速查重与应用

C++位图算法实战:std::bitset快速查重与应用

std::bitset适用于值域固定且已知的大规模排重或存在性判断,如0–999999整数出现检测;不适用于动态范围或运行时确定容量的场景。

std::bitset适用于值域固定且已知的大规模排重或存在性判断,如0–999999整数出现检测;不适用于动态范围或运行时确定容量的场景。

c++如何使用std::bitset进行位图算法_c++ 快速查找与大规模数据排重【方法】

std::bitset 适合哪些位图场景

std::bitset 本质是编译期确定大小的静态位容器,适用于「值域固定且已知」的大规模排重或快速存在性判断。比如:判断 0–999999 中哪些整数出现过、统计某日用户 ID(限定在 1–10⁶ 范围)是否访问过。它不适合动态范围(如输入含负数、超 size() 的值)、也不适合运行时才确定容量的场景——这时得换 std::vector 或第三方布隆过滤器。

初始化与基础操作要注意什么

声明时必须指定模板参数(即位数),不能用变量:

std::bitset<1000000> visited; // ✅ 正确
int n = 1000000;
std::bitset visited; // ❌ 编译错误:n 非常量表达式
插入和查询用 set() 和 test()(或下标 []),注意下标从 0 开始:
    • visited.set(x) 标记位置 x 为 true(自动越界检查?不!x ≥ size() 是未定义行为)
    • visited.test(x) 安全等价于 (x < visited.size()) && visited[x],但需手动校验范围
    • visited[x] = true 不做边界检查,调试模式下可能断言失败,发布版直接 UB

内存与性能的真实代价

std::bitset 占用约 (N + 7) / 8 字节,对齐后可能略多。例如 std::bitset<1000000> 实际占 125000 字节(122 KiB),远小于 std::unordered_set 存 10⁵ 个 int 的开销(通常 > 2 MiB)。但要注意:

    • 构造函数默认将所有位清零,无额外开销
    • count() 是 O(N/word_size),现代 libstdc++ 用 popcnt 指令,极快
    • 迭代“已置位”的索引没有内置方法,需手写循环或配合 to_ulong() 分段处理(仅适用于小 size)
若需遍历所有 true 位,别指望 std::bitset 提供迭代器——它压根没有。

排重逻辑怎么写才不出错

典型排重流程是:读入每个数 x,检查是否已存在,再决定是否计入结果。关键陷阱在于忽略值域合法性:

std::bitset<1000000> seen;
std::vector unique;

for (int x : input) {
if (x < 0 || x >= 1000000) continue; // 必须加!否则 set(x) UB
if (!seen.test(x)) {
seen.set(x);
unique.push_back(x);
}
}
如果数据源可能含非法值(如 -1、1000005),跳过比崩溃好;若必须支持更大范围,应拆成多个 std::bitset 或改用 std::vector 动态扩容——但后者不提供 count() 硬件加速,且内存局部性稍差。

真正麻烦的是“值域看似固定实则浮动”的情况,比如日志中用户 ID 最大值每天不同。这时候硬编码 std::bitset<1048576> 很容易某天溢出,又没法 runtime 调整。这种场景,std::bitset 就不是解,而是隐患源头。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
编程开发
相关文章 更多
会声会影2024去除字幕导出后出现黑边解决
会声会影2024去除字幕导出后出现黑边解决

会声会影2024删除字幕后导出视频四周出现黑边?这通常不是软件故障,而是画面比例与项目设置不匹配。本文教你通过核对源视频比例、调整裁剪方式及统一输出尺寸,解决黑边问题,避免画面拉伸变形。

会声会影硬字幕和软字幕在会声会影区别讲解
会声会影硬字幕和软字幕在会声会影区别讲解

详解会声会影中软字幕(独立轨道)与硬字幕(内嵌像素)的区别。分析两者在修改、删除及导出后的不同表现,提供快速判断方法及处理建议,帮助剪辑者根据需求选择正确的字幕处理方式。

WPS 表格日期格式乱了怎么修正
WPS 表格日期格式乱了怎么修正

解决WPS表格中日期变成数字、格式不统一或无法排序的问题。通过识别底层数据类型,使用单元格格式、分列工具和排序验证,快速将文本或错误格式转换为标准日期。

哔哩哔哩PC客户端视频加载卡顿如何优化
哔哩哔哩PC客户端视频加载卡顿如何优化

哔哩哔哩PC客户端看视频转圈、画面停滞?本文详解如何通过降低画质、清理缓存、调整硬件解码及监控后台资源来优化播放性能,适用于Windows系统用户排查常见卡顿故障。

立刻MV进阶技巧:怎么调整画质参数与优化剪辑节奏
立刻MV进阶技巧:怎么调整画质参数与优化剪辑节奏

掌握立刻MV的高级设置技巧,学习如何根据发布场景调整画布与画质参数,并依据歌曲段落优化镜头切换节奏,生成清晰流畅且文件大小适中的音乐视频。

WPS 表格怎么单独锁定部分单元格
WPS 表格怎么单独锁定部分单元格

在WPS表格中,仅设置单元格格式无法防止修改。需通过取消全表锁定、指定区域锁定、开启工作表保护三步实现部分单元格防误改。本文解析具体操作逻辑及密码注意事项。

Windows10安装报错0x80300024解决办法
Windows10安装报错0x80300024解决办法

遇到 Windows 10 安装错误代码 0x80300024?不要急于格式化硬盘。本文详解如何通过断开多余设备、统一 UEFI 启动模式及检查安装介质来解决该问题,并提供安全处理分区的操作建议。

蛙蛙写作怎么区分正版与非正版安装包
蛙蛙写作怎么区分正版与非正版安装包

担心下载到假冒的蛙蛙写作?本教程教你通过官方域名 wawawriter.com、App Store 开发者“杭州引力智航科技有限公司”及正规应用商店渠道,快速辨别正版安装包,保障账号与数据安全。

漫蛙2 Manwa2 官方正版功能详解与数据同步教程
漫蛙2 Manwa2 官方正版功能详解与数据同步教程

漫蛙2 Manwa2 (https://www.ao3cn.cc/)提供海量正版资源与无广告清爽体验。针对多设备阅读断点、离线缓存及画质需求,本文详解其横竖屏切换、智能推荐及高清显示功能,并逐步指导用户通过账号登录与书架设置完成阅读进度同步,确保在Android设备上获得流畅、舒适的追更体验。

用音述AI分轨功能做采样(Sampling):打造你的Hip-Hop采样库
用音述AI分轨功能做采样(Sampling):打造你的Hip-Hop采样库

想提升Hip-Hop制作手感?利用音述AI的分轨功能,提取人声、鼓点和贝斯素材。本文详解从导出、剪辑到标签管理的完整流程,助你打造合规且实用的个人采样库。

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

PDF教程
PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
IntelliJ IDEA macOS版
IntelliJ IDEA macOS版
Mac

IntelliJ IDEA 是 JetBrains 推出的专业集成开发环境,重点服务于 Java、Kotlin 与 JVM 项目开发。软件集成代码补全、静态检查、重构、调试、测试、版本控制及构建工具,并可借助插件扩展语言和框架支持。

PyCharm macOS版
PyCharm macOS版
Mac

JetBrains PyCharm 是面向 Python 开发者的集成开发环境,提供智能补全、代码检查、重构、调试、测试、版本控制及虚拟环境管理功能。Mac 版兼容 Intel 与 Apple 芯片,核心功能可免费使用。

WebStorm macOS版
WebStorm macOS版
Mac

JetBrains WebStorm 是面向 JavaScript、TypeScript 和现代 Web 技术的专业集成开发环境,可智能理解项目结构,提供代码补全、重构、错误检查、运行调试、测试及 Git 工具。

WINDOWS 更多
IntelliJ IDEA Windows版
IntelliJ IDEA Windows版
Windows

JetBrains IntelliJ IDEA 是以 Java、Kotlin 和 JVM 项目为核心的专业集成开发环境,提供智能补全、代码检查、安全重构、调试、测试、版本控制及构建工具集成。统一发行版的核心功能可免费用于商业和非商业项目,

PhpStorm Windows版
PhpStorm Windows版
Windows

PhpStorm 是 JetBrains 面向 PHP 与现代 Web 开发打造的专业集成开发环境,提供代码补全、静态检查、重构、调试、测试、数据库、版本控制及前端语言支持。Windows 用户可直接下载安装程序,

PyCharm Windows版
PyCharm Windows版
Windows

PyCharm 是 JetBrains 推出的 Python 集成开发环境,提供智能代码补全、错误检查、重构、调试、测试、Git、终端及 Jupyter Notebook 支持。统一版安装后可体验 30 天 Pro 功能,