首页
学习
活动
专区
圈层
工具
发布

map和unordered_map性能对比

这些天写题目,我就一直想知道这些容易更深层的选择,为什么大多数人更愿意选择哈希表,而不选择map/set?...---- 首先,看底层实现,map的底层实现是红黑树,而unordered_map的底层实现是哈希表。 因此,map内部的元素是有序的,而unordered_map的底层是无序的。...由于map的底层使用的是红黑树,每个节点都需要额外的保存父节点,孩子节点和红/黑性质,导致占用空间颇大。 除非是对顺序有特殊要求的场景,不然我们一般不去选择map。...对于unordered_map,底层实现是哈希表,所以其查找速度会非常快。 对于查找问题,unordered_map的效率不言而喻。 那有什么不好的地方?...对于unordered_map或unordered_set容器,其遍历顺序与创建该容器时输入的顺序不一定相同,因为遍历是按照哈希表从前往后依次遍历的。 我说明白了吗?

2.1K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JDK容器学习之Map: HashMap,TreeMap,LinkedHashMap对比小结

    HashMap, TreeMap, LinkedHashMap 对比 1....应用场景&使用小建议 HashMap, LinkedHashMap, TreeMap 非线程安全,因此都不适用于多线程环境下 希望有序的Map,考虑采用 LinkedHashMap, TreeMap...有自己的排序需求场景的,可以使用TreeMap 根据塞入Map的先后顺序进行排序的,可以使用 LinkedHashMap 其他普通kv接口存储,尽量采用 HashMap 若能确定Map的元素个数,...避免出现大量的hash碰撞(一般不自己覆盖 key的 hashcode 方法,这个问题不太大) 有自定义排序需求时,使用 TreeMap 尽量保证结构的稳定,不会频繁出现添加删除的情况(因为会导致) Map...中不存在两个Key通过定义的比较器,返回0,即不存在类似 HashMap 的碰撞情况 根据进入Map的先后确定遍历顺序,使用 LinkedHashMap 遵从 HashMap 的使用规则 相关博文 JDK

    1.1K100

    再谈Object与Map的使用场景分析:性能对比分析

    Map和Object有非常多相似的地方需要我们去更深入的了解和对比,才能分析出他们分别更适合的应用场景。...(如有疑问可参考:链接)继承:Map是Object的实例对象,而Object显然不可能是Map的实例对象。...所以,针对于存在大量增删操作的场景,使用Map更合适。不同于Object,Map会保留所有元素的顺序。...Map只能通过构造函数方式创建;Map本身具有size属性,Object需要使用 keys()、values()等方法获取;Map本身具有可迭代属性,Object不具有;Map会保持数据的插入顺序,Object...转载本站文章《再谈Object与Map的使用场景分析:性能对比分析》,请注明出处:https://www.zhoulujun.cn/html/webfront/ECMAScript/js/2023_0418

    1.2K10

    再谈Object与Map的使用场景分析:性能对比分析

    Map和Object有非常多相似的地方需要我们去更深入的了解和对比,才能分析出他们分别更适合的应用场景。...(如有疑问可参考:链接)继承:Map是Object的实例对象,而Object显然不可能是Map的实例对象。...所以,针对于存在大量增删操作的场景,使用Map更合适。不同于Object,Map会保留所有元素的顺序。...Map只能通过构造函数方式创建;Map本身具有size属性,Object需要使用 keys()、values()等方法获取;Map本身具有可迭代属性,Object不具有;Map会保持数据的插入顺序,Object...转载本站文章《再谈Object与Map的使用场景分析:性能对比分析》,请注明出处:https://www.zhoulujun.cn/html/webfront/ECMAScript/js/2023_0418

    1.8K00

    【Kotlin】集合操作 ⑤ ( Map 集合 | 获取 Map 值 | Map 遍历 | 可变 Map 集合 )

    文章目录 一、Map 集合 二、获取 Map 值 三、Map 遍历 四、可变 Map 集合 一、Map 集合 ---- 调用 mapOf 函数 创建 Map 集合 , 键值对 元素有两种初始化方式 :...("Tom" to 18, "Jerry" to 12, "Jack" to 20) println(map) val map2 = mapOf(Pair("Tom", 18), Pair...=12, Jack=20} 二、获取 Map 值 ---- 获取 Map 值 : 使用 取值运算符 [] 获取 Map 集合中的值 , 运算符中传入 键 , 如果找不到 键 对应的 值 , 返回 null...; 使用 Map#getValue 函数 , 获取 键 对应的 值 , 如果没有找到则抛出异常 ; public fun Map.getValue(key: K): V =...=20} 18 18 20 88 三、Map 遍历 ---- Map 遍历方式 : forEach 函数 , 传入 Lambda 表达式参数 , 该 Lambda 表达式的参数为 Map.Entry<K

    5.2K40

    有序map和无序map_map怎么实现有序

    目录 为什么会有这篇文章 Map与对象的区别 有序Map 无序Object 总结 为什么会有这篇文章 笔者最近在进行业务开发的时候遇到了遇到了一个数据格式的问题。...Map与对象的区别 Object是JS中的一种数据类型,所有的基础数据类型都继承Object进行实现。 在JS中Map也是继承自Object进行实现的。...有序Map 在JS中有序Map通过Map对象进行实现。...上面的需求通过Map进行实现之后为 无序Object js中常规对象都是无序map,如果属性值中存在typeof Numebr(key) === ‘number’ 为true的情况会顺序不会按照理想的顺序来排列...总结 在JS中使用Map来存储数据如果不涉及枚举或者没有顺序要求使用Object进行实现,如果存在顺序要求使用有序Map进行实现。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    00

    mle与map_normal map

    摘要 本文是关于MLE(最大似然估计)与MAP(最大后验概率)的一些自己学习的心得....(本文的重点在于对比MLE和MAP) 正文 1.MLE(最大似然估计) MLE简单的理解可以这样:假设我们手上有一批数据(样本),而且我们假设这些数据(样本)服从某个分布( 模型已知),但是参数未知.这个时候...n P ( x i | θ ) argmax \ \prod_{i=1}^n{P(x_i|\theta)} \tag 1 后面一般是取对数,把连乘转化成连加的形式更方便计算,后面就不展开了. 2.MAP...所以在经过几步的简单推导,我们可以得出MLE和MAP其实区别在于: 首先,我们不要忘了我们的目的,我的们目的是求模型中未知的参数!...那这里似乎透露着利用MAP来估计参数会不会使得模型更加的好?这就取决于我们的这个先验概率捏的准不准.

    00

    【Groovy】map 集合 ( map 集合遍历 | 使用 map 集合的 find 方法遍历 map 集合 | 代码示例 )

    文章目录 一、使用 map 集合的 find 方法遍历 map 集合 二、代码示例 一、使用 map 集合的 find 方法遍历 map 集合 ---- 使用 map 集合的 find 方法遍历 map...1 个参数 , 也可以有 2 个参数 ; 如果 有 1 个参数 , 则 传递 Entry 键值对 对象 ; 如果有 2 个参数 , 则 传递 键 和 值 两个对象 ; 该方法会返回 map...集合中 第一个查找到的 Entry 键值对对象 , 该对象中包含一个 键 和 值 ; map 集合的 find 方法 函数原型 : /** * 查找与闭包条件匹配的第一个条目。... find(Map self, @ClosureParams(MapEntryOrKeyValue.class) Closure<?...= [J:"Java", "K":"Kotlin", 'G':"Groovy"] // 遍历 map 集合 def entry = map.find { key, value

    12K40

    Go Map(集合)和sync.Map

    Map可以通过key在O(1)的时间复杂度内进行查询、更改、删除操作,key到value间的映射由哈希函数实现。Go的Map相当于C++的Map,Java的HashMap,Python的Dict。...切片作为map的值 特别注明,Go语言中可以使用切片作为map的值,这种情况下一个key对应多个value。 sync.Map Go语言中的Map同样不是线程安全的。...如果并发地读写普通的Map,会报错误fatal error: concurrent map read and map write,map内部会对并发操作进行检查并提前发现。...Go语言在1.9版本提供了效率较高的sync.Map sync.Map有以下特性: 无需初始化,直接声明即可使用 sync.Map不能像map那样读写,而是使用sync.Map提供的方法,Store(key...它不限制一个map内所有的key和value都必须是相同的类型。 参考文献 深入理解 Go map:赋值和扩容迁移 Go map实现原理 Go语言sync.Map(在并发环境中使用的map)

    2.2K30

    go map 原理与并发安全map

    map 原理 go map 整体和 java hashmap 差不多, 只是源码阅读的位置不太方便 map 的相关文件位于 GOROOT 的 runtime 包中的 map.go map 结构 hmap...// A header for a Go map. type hmap struct { // map中的键值对的数量 count int // 状态标志 flags...使用的是 数组 + 数组的解决方法(overflow 这个设计不知道算不算链表) 上面在讲 map 结构的时候说了:一个 map 中最多容纳 6.5 * 2 ^ B 个 key-value, 6.5...的遍历 map 的遍历是无序的,这是 golang 开发者故意为之 由于 map 扩容的时候会可能会改变元素的存储位置,因此如果按照正常顺序遍历的话可能会发生第一次遍历跟第二次遍历得到的结果顺序不一致的情况...= 0 { fatal("concurrent map read and map write") } 官方还提供了并发安全的 sync.map 来应对并发场景 数据结构 type Map struct

    56010
    领券