std::map 和 std::unordered_map

std::mapstd::unordered_map 是 C++ STL 中的两种关联容器,它们在存储元素和查找元素的方式上有一些重要的区别。

  1. 区别:
  • std::map

    • std::map有序关联容器,按照键值进行自动排序,默认按照键的升序排列。
    • 内部实现使用红黑树(Red-Black Tree),因此查找、插入和删除操作的平均时间复杂度为 O(log n)
    • 需要额外的空间来存储树节点的指针,因此相对于 std::unordered_map 占用更多的内存。
  • std::unordered_map

    • std::unordered_map 是无序关联容器,不对元素进行排序,元素的存储位置由哈希函数决定。
    • 内部实现使用哈希表(Hash Table),因此查找、插入和删除操作的平均时间复杂度为 O(1),但最坏情况下可能达到 O(n)。
    • 不需要维护元素的排序,因此在插入和删除元素时性能可能比 std::map 更好,但对于查找元素,std::map 在有序状态下的性能可能更好。
  1. 适用场景:
  • std::map 适用场景:

    • 当需要按照键值对进行自动排序时,可以选择使用 std::map。它适用于那些需要在遍历元素时按照键的顺序进行的场景。
    • 在需要在一定范围内查找键值时std::map 的查找性能是稳定的,不会像 std::unordered_map 在最坏情况下出现线性查找时间。
  • std::unordered_map 适用场景:

    • 当不需要元素有序,而更关心插入和删除的性能时,可以选择 std::unordered_map。它适用于大量插入和删除操作的场景。
    • 当查找频率较低,而插入和删除频率较高时,std::unordered_map 的性能通常优于 std::map

总结:

  • 如果需要有序的关联容器,或者对元素的顺序有严格要求,选择 std::map
  • 如果对元素的顺序无要求,更关心插入和删除操作的性能,选择 std::unordered_map

在实际应用中,根据具体的需求和数据特点来选择合适的关联容器是很重要的,有时候也可以根据场景的不同在程序中灵活地使用这两种容器。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 哈希表表: 存储数据 key –> value; 除留余数法 为最常用的构造散列函数的方法。对于散列表长为m的散列...
    ICE0223阅读 408评论 0 0
  • hash_map ≈ unordered_map 最初的 C++ 标准库中没有类似 hash_map 的实现,但不...
    顽强的猫尾草阅读 34,520评论 0 3
  • Map概述 map本质上是一种映射,其可以将任何基本类型(包括STD容器)映射到任何基本类型(包括STL容器)。本...
    hojztuh阅读 999评论 0 0
  • 1、多态的表现 定义:多态、封装和继承是面向对象的三大特性。多态需满足三个条件:(1)有继承;(2)有重写;(3)...
    1024_阅读 177评论 0 0
  • 一、C语言基础 1、struct 的内存对齐和填充问题其实只要记住一个概念和三个原则就可以了: 一个概念:自然对齐...
    XDgbh阅读 2,351评论 1 38

友情链接更多精彩内容