map和unordered_map区别

本文介绍了C++ STL中的map与unordered_map容器的区别、内部实现原理及应用场景。map基于红黑树实现,适用于需要排序的场景;而unordered_map基于哈希表,查找效率高,适用于大量数据处理。

map和unordered_map也是常用的两个容器,当然面试的时候也可能会问你内部实现原理。

map、unordered_map 是 C++ STL 中的两个容器

区别

  1. 导入的头文件 map:#include <map> unordered_map:#include <unordered_map>
  2. 原理:map内部实现了一个红黑树(红黑树是非常严格的平衡二叉搜索树),该结构具有自动排序的功能,因此 map 内部的所有元素都是有序的,红黑树的每一个节点都代表着 map 的一个元素,所以对于 map 进行的查找,删除,添加等一系列的操作都相当于是对红黑树进行这样的操作,故红黑树的效率决定了 map 的效率。
    unordered_map基于哈希表来实现的,因此其元素的排列顺序是杂乱的,无序的。查找的时间复杂度是O(1),在海量数据处理中有着广泛的应用。

map和unordered_map的优缺点

map优点:map是有序的、基于红黑树实现,查找的时间复杂度是O(n)
map缺点:空间占用率比较高,因为内部实现了红黑树,虽然提高了运行效率,但是每个节点都要保存父亲节点和孩子节点和红黑树的性质,使得每一个节点都占用大量的空间。
适用的情况:对于要有序的结构,使用map。
unordered_map优点:因为内部是哈希表来实现的,所以查找效率会非常高。
unordered_map缺点:哈希表的建立比较费时
适用的情况:对于查找问题,使用unordered_map会更好一点。

实例

map是STL的一个关联容器,它提供一对一的hash。也就是所说的键值对。
第一个可以称为关键字(key),每个关键字只能在map中出现一次;
第二个可能称为该关键字的值(value);
可以存储任意类型的数据,包括使用者自定义的数据类型。map主要用于资料一对一映射(one-to-one)的情況

map中常用的操作
begin()	返回指向map头部的迭代器
clear()	删除所有元素,注意是所有元素
count()	还回指定元素出现的次序
empty()	如果map为空则还回true
end()	返回指向map末尾的迭代器
erase()	删除一个元素
find()		查找一个元素
insert()	插入一个元素
max_size()	还回可以容纳的最大元素个数
size()		还回map中元素的个数
swap()		交换两个map
rbegin()        返回一个指向map尾部的逆向迭代器
rend()          返回一个指向map头部的逆向迭代器
get_allocator(<
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Minuw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值