c++中map和unorderedmap与java中hashmap和linkedhashmap
LinkedHashMap 存储结构和 HashMap 相同,依然是数组+链表+红黑树
LinkedHashMap 额外持有一个双向链表,维护插入节点的顺序
最终的数据结构如下图
实际的元素存储与HashMap一致,依然是数组+链表+红黑树的形式
区别在于:
除了维护数组+链表的结构之外,还根据插入Map先后顺序维护了一个双向链表的头尾head,tail
Node基本结构,相比较HashMap而言,还增加了 before,after 两个分别指向双向链表中前后节点的属性
即下图中的双向链表中的节点,其实值依然是下面的数组+链表结构中的元素
【c++中map和unorderedmap与java中hashmap和linkedhashmap】
文章图片
图片.png
遍历map时要求按照插入顺序输出则选择LinkedHashMap,当然会更占内存一些否则使用hashmap就可以。
因为LinkedHashMap中有双向链表保存节点顺序所以移动一个节点到链表头很方便,删除一个节点也很
方便,可以使用它来实现LRU算法。
c++中map底层直接是一颗红黑树所以输入进map的key会自动排序,挨个遍历key的话也是按照排序后的key依次遍历,查找key效率就是红黑树的查找效率。
unorderedmap底层先是哈希表,所以key值无序,所以理想情况下查找效率是O(1), 类似于java中hashmap的实现。
map和unorderedmap想实现按照插入key的顺序来遍历可以自己使用vector记录key插入顺序,然后按照vector中key值依次遍历。
原文链接:https://blog.csdn.net/liuyueyi25/article/details/78511278
推荐阅读
- 热闹中的孤独
- Shell-Bash变量与运算符
- JS中的各种宽高度定义及其应用
- 2021-02-17|2021-02-17 小儿按摩膻中穴-舒缓咳嗽
- 深入理解Go之generate
- 异地恋中,逐渐适应一个人到底意味着什么()
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- “成长”读书社群招募
- 2020-04-07vue中Axios的封装和API接口的管理