map和unordered_map的区别

其实一直在用这俩stl,今天在看数据去重的论文,记录一下吧,万一后期用的上。

1、实现方式:

  • map是基于红黑树实现的,它保持元素有序,插入和查找的时间复杂度是O(log n)。
  • unordered_map是基于哈希表实现的,不保持元素有序,插入和查找的时间复杂度平均为O(1)。但最坏情况下可能会达到O(n)。

2、元素顺序:

  • map中的元素按照键的自然顺序(或者通过自定义比较函数)进行排序,所以遍历得到的元素是有序的。
  • unordered_map中的元素没有特定的顺序,遍历得到的元素顺序与插入顺序无关。

3、查找效率:

  • map适用于需要有序数据以及频繁查找的场景。
  • unordered_map适用于对插入和查找性能要求较高,对元素顺序无特别要求的场景。

 

4、内存开销:

  • 由于map使用红黑树来维护有序性,它的内存开销通常比unordered_map要高。
  • unordered_map使用哈希表,其内存开销通常较低,但在存储大量数据时,由于哈希表冲突可能需要更多内存。

 

5、需要的头文件:

  • map需要包含头文件 <map>
  • unordered_map需要包含头文件 <unordered_map>

 

6、关键字类型要求:

  • map要求关键字类型有比较函数或支持<运算符来进行元素排序。
  • unordered_map要求关键字类型支持哈希函数和==运算符。

7、C++标准要求:

  • mapunordered_map都是C++标准库的一部分,但在C++11之前,只有map是标准库的一部分,而unordered_map是在C++11引入的新容器。

 

8、迭代器稳定性:

  • map的迭代器在插入和删除元素时不会失效,因为它使用红黑树来保持顺序。
  • unordered_map的迭代器在插入元素时可能会失效,因为哈希表的重新哈希过程可能导致元素位置改变。

 

综上所述,选择使用map还是unordered_map取决于具体的应用场景和性能要求。如果需要有序数据、稳定的迭代器以及对查找性能不那么敏感,那么map是一个不错的选择。如果对查找性能要求较高,对元素顺序无特殊要求,并且能够接受较少的内存开销,那么unordered_map可能更适合。 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值