c++中map和unorderedmap与java中hashmap和linkedhashmap

LinkedHashMap 存储结构和 HashMap 相同,依然是数组+链表+红黑树
LinkedHashMap 额外持有一个双向链表,维护插入节点的顺序
最终的数据结构如下图
    实际的元素存储与HashMap一致,依然是数组+链表+红黑树的形式
    区别在于:
    除了维护数组+链表的结构之外,还根据插入Map先后顺序维护了一个双向链表的头尾head,tail
    Node基本结构,相比较HashMap而言,还增加了 before,after 两个分别指向双向链表中前后节点的属性
    即下图中的双向链表中的节点,其实值依然是下面的数组+链表结构中的元素

c++中map和unorderedmap与java中hashmap和linkedhashmap_第1张图片
图片.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

你可能感兴趣的:(c++中map和unorderedmap与java中hashmap和linkedhashmap)