小米二面:std::map和std::unordered_map谁更快?别只知道哈希表
一、底层实现原理对比std::map红黑树的优雅平衡std::map的底层实现是红黑树这是一种自平衡的二叉搜索树。红黑树通过以下五条规则维持平衡每个节点要么是红色要么是黑色根节点必须是黑色所有叶子节点nil节点均为黑色若一个节点是红色则其两个子节点必须是黑色从任意节点到其所有后代叶子节点的路径上黑色节点的数量相同这些规则确保红黑树始终保持近似平衡状态从而保证树的高度始终在O(logN)级别。红黑树的每个节点存储键值对、左右子节点指针、父节点指针和颜色标记。// 红黑树节点结构示例 templatetypename Key, typename Value struct map_node { Key key; Value value; map_node* left; map_node* right; map_node* parent; // 父指针便于旋转操作 bool is_red; // 颜色标记 };std::unordered_map哈希表的高效映射std::unordered_map的底层实现是哈希表采用数组链表/红黑树的组合结构。当单个桶中的元素数量超过阈值通常是8个时会自动将链表转换为红黑树以优化最坏情况下的性能。// 哈希表节点结构示例 templatetypename Key, typename Value struct hash_node { Key key; Value value; hash_node* next; // 指向同桶中的下一个节点 size_t hash; // 缓存哈希值避免重复计算 };二、内存布局与性能特性红黑树内存布局红黑树的节点在内存中是分散存储的但每个节点的结构紧凑包含键值对和树结构指针。这种设计使得红黑树在插入和删除时需要通过旋转和变色操作来维护平衡性但缓存友好性较差。哈希表内存布局哈希表采用连续的桶数组存储指针每个桶指向一个链表或红黑树。这种设计使得哈希表的内存占用波动较大但平均查找速度更快。当负载因子超过阈值时哈希表会自动扩容可能导致迭代器失效。三、不同数据量下的性能测试几百几千条数据性能几乎无差异随便选单次查询/插入耗时都在纳秒微秒级差距在1~10纳秒人类完全感知不到。1万10万条数据差异开始显现unordered_map的优势慢慢体现单次操作耗时大概是map的1/5 ~ 1/3。10万条及以上数据unordered_map性能碾压map差距能达到10倍甚至百倍数据量越大logN的增长越明显map的耗时会持续增加而unordered_map依然保持O(1)的极致性能。四、自定义哈希函数踩坑指南常见问题哈希冲突严重当不同的键通过哈希函数计算出相同的哈希值时会落到同一个桶中导致性能退化。哈希函数与相等比较不一致如果哈希函数和operator的逻辑不一致会导致查找失败。哈希计算耗时过长对于长字符串等复杂类型哈希计算的时间可能比查找本身还要长。解决方案// 正确的自定义哈希函数示例 struct Person { std::string name; int age; booloperator(const Person other) const { return name other.name age other.age; } }; namespacestd { template struct hashPerson { size_t operator()(const Person p) const { size_t h1 std::hashstd::string{}(p.name); size_t h2 std::hashint{}(p.age); return h1 ^ (h2 1); // 异或结合位移减少碰撞 } }; }五、实际应用场景选择选择std::map的场景需要有序遍历所有key需要进行范围查询如查找key100且key200的所有数据对内存占用敏感担心哈希冲突导致性能不稳定选择std::unordered_map的场景业务不需要有序存储未来数据量可能大幅增长业务是高频的单条查询操作可以提供高效的哈希函数

相关新闻

【图像加密解密】改进的DCT加密的先进双域图像加密技术【含Matlab源码 15122期】

【图像加密解密】改进的DCT加密的先进双域图像加密技术【含Matlab源码 15122期】

💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab领域博客之家💞&…

2026/7/7 2:55:36 阅读更多 →
与RabbitMQ 相比,Kafka 有哪些优势?

与RabbitMQ 相比,Kafka 有哪些优势?

与RabbitMQ 相比,Kafka 有哪些优势? 我们来比较一下 Kafka 相对于 RabbitMQ 的一些主要优势: 吞吐量与性能: Kafka 优势: Kafka 是为处理极高吞吐量而设计的。它利用顺序 I/O 访问磁盘、高效的批处理机制和零拷贝技术…

2026/5/17 8:22:09 阅读更多 →
python: 枚举类型 enum

python: 枚举类型 enum

# encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述: # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2024.3.6 python 3.11 # os …

2026/5/17 3:52:03 阅读更多 →

最新新闻

PgBouncer 的 session 模式详解

PgBouncer 的 session 模式详解

1. 什么是 PgBouncer? PgBouncer 是一个轻量级的 PostgreSQL 连接池工具,主要用于管理和复用数据库连接,减少频繁建立和断开连接的开销,从而提升数据库性能和并发处理能力。 2. PgBouncer 的三种连接池模式 PgBouncer 支持三种主要的连接池模式,每种模式对应不同的会话…

2026/7/7 3:51:36 阅读更多 →
Linux内存Overcommit机制:三种策略、OOM Killer算法与cgroup限制行为的工程化分析

Linux内存Overcommit机制:三种策略、OOM Killer算法与cgroup限制行为的工程化分析

Linux内存Overcommit机制:三种策略、OOM Killer算法与cgroup限制行为的工程化分析 一、为什么Linux允许超额分配内存 物理内存是有限资源,但进程的内存请求远大于实际使用量。典型场景:进程malloc了1GB但只写了100MB,剩余900MB从未…

2026/7/7 3:49:35 阅读更多 →
移动端SoC选购避坑:3个关键参数(CPU/GPU/制程)解读与2024年芯片性能天梯图

移动端SoC选购避坑:3个关键参数(CPU/GPU/制程)解读与2024年芯片性能天梯图

移动端SoC选购避坑:3个关键参数(CPU/GPU/制程)解读与2024年芯片性能天梯图当你在手机卖场被各种"旗舰芯片""性能怪兽"的宣传语包围时,是否真正清楚这些参数背后的含义?本文将带你穿透营销迷雾&…

2026/7/7 3:49:35 阅读更多 →
小程序域名如何进行安全防护?一篇讲透

小程序域名如何进行安全防护?一篇讲透

随着小程序生态的快速发展,越来越多的企业将核心业务迁移到小程序上。然而,小程序同样面临着Web应用常见的各类安全威胁——SQL注入、XSS攻击、恶意爬虫、CC攻击、DDoS攻击等。那么,小程序的域名应该如何进行安全防护呢?本文将为你…

2026/7/7 3:47:35 阅读更多 →
AI 金融助手如何真正落地:ClaudeAPI 在银行业务里的应用思路

AI 金融助手如何真正落地:ClaudeAPI 在银行业务里的应用思路

银行业对 AI 的态度,正在从过去的“这个东西能不能用”,慢慢转向更现实的问题:怎么用才安全?怎么用才可控?出了问题能不能追溯?和普通聊天机器人相比,真正能在银行里跑起来的 AI 金融助手&#…

2026/7/7 3:47:35 阅读更多 →
红海云CEO孙伟为广东财经大学开展人力资源数智化转型专题讲座

红海云CEO孙伟为广东财经大学开展人力资源数智化转型专题讲座

广东财经大学人力资源管理专业为国家一流本科专业建设点、广东省综合改革试点专业。院系领导高度重视智能化浪潮下,人力资源专业学科建设和产教融合创新。7月3日,广东财经大学人力资源管理专业数字化专题培训走进红海云总部。红海云CEO孙伟受邀主讲&…

2026/7/7 3:43:34 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻