新闻中心
C++如何使用unordered_map?(哈希表用法)
unordered_map 是 C++ 基于哈希表的关联容器,平均时间复杂度 O(1),不保证顺序;需支持 == 和 std::hash;常用 insert/find 避免下标意外插入;自定义类型作 key 需提供哈希与相等函数。

unordered_map 是 C++ 标准库中基于哈希表实现的关联容器,用来高效地存储和查找键值对(key-value),平均时间复杂度为 O(1)。它不保证元素顺序,但插入、查找、删除比 map(红黑树)更快。
基本用法和初始化
需要包含头文件 #include
- 键类型(Key)必须支持 == 比较和 std::hash(内置类型如 int、string 都已提供)
- 值类型(T)可以是任意可复制/移动的类型
- 常用初始化方式:
std::unordered_map
std::unordered_map<:string int> m2 = {{"a", 1}, {"b", 2}}; // 列表初始化
std::unordered_map
插入与访问元素
插入有多种写法,注意不同方式的行为差异:
- m[key] = value:若 key 不存在则插入并默认构造 value;存在则覆盖。适合简单赋值
-
m.insert({key, value}):只在 key 不存在时插入,返回 pair
,second 表示是否成功 - m.try_emplace(key, args...):C++17 引入,仅当 key 不存在时才构造 value(避免不必要的临时对象)
m["hello"] = 3.14; // 插入或更新
auto res = m.insert({"world", 2.71}); // res.second 为 true 表示新插入
m.try_emplace(42, "answer"); // 更高效地插入(尤其 value 构造代价高时)
查找与遍历
查找推荐用 find() 而非下标操作,避免意外插入:
在Android
本文档主要讲述的是在Android-Studio中导入Vitamio框架;介绍了如何将Vitamio框架以Module的形式添加到自己的项目中使用,这个方法也适合导入其他模块实现步骤。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
0
查看详情
- m.find(key) 返回 iterator,等于 m.end() 表示未找到
- m.count(key) 返回 0 或 1(不适用于 multimap 场景)
- 遍历用范围 for 循环,每个元素是 std::pair
auto it = m.find("hello");
if (it != m.end()) {
std::cout second }
for (const auto& p : m) {
std::cout " }
性能与自定义哈希/比较
默认情况下,内置类型自动支持哈希;若用自定义类型作 key,需提供哈希函数和相等判断:
- 定义 std::hash
特化,重载 operator() - 或传入自定义哈希仿函数和相等仿函数作为模板参数
- 注意:哈希函数应尽量均匀分布,避免大量冲突影响性能
struct Person { std::string name; int id; };
struct PersonHash {
size_t operator()(const Person& p) const {
return std::hash<:string>{}(p.name) ^ (p.id }
};
struct PersonEqual {
bool operator()(const Person& a, const Person& b) const {
return a.name == b.name && a.id == b.id;
}
};
std::unordered_map
基本上就这些。掌握 insert/find/[] 的区别、避免下标查找引发意外插入、理解哈希定制逻辑,就能稳妥用好 unordered_map。
以上就是C++如何使用unordered_map?(哈希表用法)的详细内容,更多请关注其它相关文章!
# 特化
# 封开网站优化公司
# 网络营销推广运营怎么去获客
# 乡音电影网站建设
# 北京抖音推广营销招聘
# 重庆seo关键词排名哪家好
# 行业关键词排名软件
# 南充网站推广蔚忻hfqjwl下拉
# seo和恶意外链
# 油烟机sem搜索推广营销方案
# 嘉兴seo外链代发
# 文档
# 边缘
# ai
# 自己的
# 遍历
# 键值
# 如何使用
# 不存在
# 游戏开发
# 自定义
# red
# 标准库
# 键值对
# 区别
# c++
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
J*a应用集成GitHub CLI与API认证指南
LINUX下如何进行磁盘分区_fdisk与parted工具在LINUX中的使用对比
ArrayList与LinkedList操作复杂度详解:遍历与修改
C++指针和引用有什么区别_C++内存管理核心概念深度解析
期待已久:小米17 Ultra、小米首款NAS本月登场
c++如何使用折叠表达式(Fold Expressions)_c++17可变参数模板新技巧
抖音从哪里进入网页版_抖音官方入口链接
Lar*el Excel导入时生成自定义递增ID的策略与实践
PHP表单数据传递:如何通过隐藏输入字段获取动态ID
Golang如何处理RPC请求负载均衡_Golang RPC请求负载均衡策略与实践
支付宝如何管理隐私设置_支付宝隐私保护的配置技巧
Django模型中自动计算可用余额的实现方法
Typer应用中动态命令行参数的解析与处理
Win11怎么安装Linux子系统 Win11 WSL2安装Ubuntu及环境配置指南
Go语言中对Map值调用带指针接收者方法:原理与最佳实践
德邦快递查询平台 德邦快递物流信息查询入口
Tabulator表格中精确实现日期时间排序的指南
J*aScript中管理异步API调用:确保操作顺序与数据一致性
俄罗斯浏览器官网直达链接 俄罗斯浏览器最新在线入口导航
怎么在html里运行vbs脚本_html中运行vbs脚本方法【教程】
Win11怎么开启高性能模式_Windows 11电源计划优化设置
uc浏览器网页版入口 uc浏览器网页版最新网址
蛙漫2台版漫画地址 Manwa2正版网页版链接
PySpark中从现有列右侧提取可变长度字符创建新列的教程
CSS条件样式无法按设备触发怎么排查_media条件语句正确设置解决触发问题
J*a里如何使用N*igableMap进行导航操作_可导航Map操作技巧解析
荒野行动PC版怎么注册_荒野行动PC版账号注册详细流程图文教程
如何更改在 Excel 中打开超链接时的默认浏览器
双系统安装时,如何设置默认启动系统? msconfig命令了解一下!
如何使用CaptainHook和Composer管理Git钩子_在提交前自动运行代码检查的Composer配置
Win11怎么开启省电模式_Win11电池节电模式自动开启
C++ map遍历方法大全_C++ map迭代器使用总结
4399网页游戏电脑版全新入口 4399电脑端在线玩指南
夸克浏览器桌面版同步不了书签怎么处理 夸克浏览器跨设备同步异常解决方案
b站怎么看视频的弹幕数量_b站弹幕数量查看方法
Win10双系统截图高效法 截屏快捷键速记【技巧】
Flexbox布局实践:实现粘性导航栏与底部固定页脚
163邮箱网页版入口导航平台 163邮箱网页版登录入口官网导航
押井守高度称赞《辐射4》:玩了八年都停不下来!
Win11怎么隐藏桌面图标 Win11一键隐藏所有桌面元素及恢复显示
邮政快递包裹最新位置 邮政快递实时追踪入口
J*aScript打印功能_j*ascript输出控制
J*a编写用户注册与登录功能_掌握字符串与验证逻辑
如何将HTML表格多行数据保存到Google Sheets
护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印?
J*aScript动态修改指定div内所有a标签样式指南
浏览器打开即用 美图秀秀网页版入口
纯CSS与HTML网格布局的HTML精简策略:SVG与JS方案解析
谷歌浏览器一键优化方案_谷歌浏览器直达主页极速不卡版
PDF怎么合并PDF并保持格式_PDF合并文件保持排版教程


2025-12-13
浏览次数:次
返回列表