当前位置: 首页 > ds >正文

C++哈希表:unordered系列容器详解

本节目标

1.unordered系列关联式容器

2.底层结构

3.模拟实现

4.哈希的应用

5.海量数据处理面试题

unordered系列关联式容器

在c++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可以达到logN,即最差的情况下需要比较红黑树的高度次,当树中的结点非常多时,查询效率也不理想。最好的查询是,进行很少的比较次数就能够将元素找到,因此c++11中,STL又提供了4个unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是其底层结构不同。

unordered_map

unordered_map的介绍

无序映射(unordered_map)是一种关联式容器,用于存储由键值(key)和映射值(mapped value)组合而成的元素, 并支持基于键的快速元素检索。

在unordered_map中: - 键值通常用于唯一标识元素 - 映射值是与该键关联的内容对象 - 键和映射值的类型可以不同 其内部实现特点:

1. 元素不会按照键值或映射值的顺序排列

2. 基于哈希值组织到桶(buckets)中

3. 通过键值直接访问元素的平均时间复杂度为O(1)

性能特性:

- 无序映射在通过键访问单个元素时比有序映射(map)更快

- 但在迭代访问元素子集时效率通常较低

接口特性:

- 支持直接访问操作符(operator[]),可通过键值直接访问映射值

- 容器提供的迭代器至少为前向迭代器(forward iterators)

unordered_map的接口使用说明

这些是别名,也就是typedef过的,为了方便后续理解,可以自行把常见和常用的了解一下

构造函数

empty (1)	
explicit unordered_map ( size_type n = /* see below */,                                const hasher& hf = hasher(),                                   const key_equal& eql = key_equal(),                           const allocator_type& alloc = allocator_type() );
explicit unordered_map ( const allocator_type& alloc );
range (2)	
template <class InputIterator>  
unordered_map ( InputIterator first, InputIterator last,   size_type n = /* see below */,const hasher& hf = hasher(),const key_equal& eql = key_equal(), const allocator_type& alloc = allocator_type() );
copy (3)	
unordered_map ( const unordered_map& ump );
unordered_map ( const unordered_map& ump, const allocator_type& alloc );
move (4)	
unordered_map ( unordered_map&& ump );
unordered_map ( unordered_map&& ump, const allocator_type& alloc );
initializer list (5)	
unordered_map ( initializer_list<value_type> il, size_type n = /* see below */,   const hasher& hf = hasher(),    const key_equal& eql = key_equal(), const allocator_type& alloc = allocator_type() );

 总结:第一个就是构造一个空的非排序map 

            第四个就是拷贝构造

            第五个是迭代器构造

基本上知道第一个和第四个就行了,其他可以自行了解

capacity函数 

iterator函数

 

元素访问函数

 

只要知道[]就可以了

modifier函数

 

学习insert erase clear swap即可

桶操作(具体可以等学习完hash后在了解)

 

unordered_set 

unordered_set的介绍和使用这里就不多加说明了,就是和set差不多,就是底层结构不一样,我们重点学习底层结构

map/set和unordered_map/unordered_set有什么区别和联系?

1.都可以实现key和key-value的搜索场景,并且功能和使用基本一样

2.map/set的底层是用红黑树实现的,遍历出来是有序的,增删查改的时间复杂度为logN

3.unordered_map和unordered_set的底层是用哈希表实现的,遍历出来的是无序的,增删查改的时间复杂度为O(1)

4.map和set是双向迭代器,unordered_map和unordered_set是单向的(仅支持++)

底层结构

请移步我的数据结构篇章中关于哈希表的讲解(包括海量数据的处理都在那一篇章讲解)

http://www.xdnf.cn/news/10416.html

相关文章:

  • day15 leetcode-hot100-28(链表7)
  • C++ —— B/类与对象(下)
  • 流媒体基础解析:从压缩到传输的基本了解
  • Linux研学-用户解析
  • Java Spring 之过滤器(Filter)详解与实战
  • Correlations氛围测试:文本或图像的相似度热图
  • 2024年ESWA SCI1区TOP,自适应学习灰狼算法ALGWO+无线传感器网络覆盖优化,深度解析+性能实测
  • DeepSeek 赋能数字孪生城市,筑牢应急管理智慧防线
  • day42 简单CNN
  • C++ list数据删除、list数据访问、list反转链表、list数据排序
  • HCIE-STP复习
  • C# 密封类和密封方法
  • simulink mask、sfunction和tlc的联动、接口
  • CSS专题之层叠上下文
  • 小明的Java面试奇遇之:支付平台高并发交易系统设计与优化[特殊字符]
  • [SC]SystemC在CPU/GPU验证中的应用(三)
  • 【2025年软考中级】第二章 2.1 程序设计语言的基本概念
  • 【C语言】讲解 程序分配的区域(新手)
  • 论文笔记: Urban Region Embedding via Multi-View Contrastive Prediction
  • C#数字图像处理(一)
  • 【Hot 100】55. 跳跃游戏
  • Unity3D仿星露谷物语开发57之保存库存信息到文件
  • ROS2与Unitree机器人集成指南
  • Linux 基础IO(上)
  • javaweb-maven以及http协议
  • (LeetCode 每日一题) 909. 蛇梯棋 (广度优先搜索bfs)
  • 电子电器架构 --- OTA测试用例分析(上)
  • 华为OD机试_2025 B卷_小明减肥(Python,100分)(附详细解题思路)
  • 最卸载器——Geek Uninstaller 使用指南
  • 设备健康管理的战略升维:用预测性维护重构企业竞争力