C++中的map于unordered_map的区别

C++的STL库中的map和unordered_map提供了不同的字典结构。map基于红黑树,元素有序,适用于需要排序和稳定查找性能的场景;unordered_map基于哈希表,查询速度快但元素无序,适合快速查找且对顺序不敏感的情况。两者在空间效率和插入查询复杂度上各有优劣,选择应根据实际需求进行。

前言

C++的STL库实现有两种字典结构,即map和unordered_map(也就是通俗意义上的hash map)。这两者虽然都称为Map,但其实它们的底层实现原理具有很大差距,因此它们的使用场景也不尽相同。

今天特意研究了一下,下面从几个方面具体谈谈它们的差别及其具体的使用场景。

介绍

字典类型又被称为关联数组(associative array),关联数组和正常数组的使用方法是相似的,但其不同之处在于字典结构的下标不必是整数,而可以是任意类型。

map和unordered_map这两种字典结构都是通过键值对(key-value)存储数据的,键(key)和值(value)的数据类型可以不同。但是字典中的key只能存在一个,即必须唯一(如果不唯一,则被称为multimap)。上述这点保证了值(value)可以直接通过键(key)来访问,这便是字典结构最为便捷之处。

区别

  1. 使用方法不同

使用方法是最直观的区别,这两种结构虽然都在STL库中,但是所使用的头文件不同。

map:#include
unordered_map:#include <unordered_map>

  1. 底层实现的数据结构不同

数据结构其实是两种类型最为根本的区别,其他的不同都是这种区别产生的结果。

map是基于红黑树结构实现的。红黑树是一种平衡二叉查找树的变体结构,它的左右子树的高度差有可能会大于 1。所以红黑树不是严格意义上的平衡二叉树AVL,但对之进行平衡的代价相对于AVL较低, 其平均统计性能要强于AVL。红黑树具有自动排序的功能,因此它使得map也具有按键(key)排序的功能,因此在map中的元素排列都是有序的。在map中,红黑树的每个节点就代表一个元素,因此实现对map的增删改查,也就是相当于对红黑树的操作。对于这些操作的复杂度都为O(logn),复杂度即为红黑树的高度。
unordered_

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值