1 map与unordered_map
1.1 介绍
map由红黑树实现,红黑树本质上是一个带有平衡功能(不同于平衡二叉树)的二叉搜索树(完全二叉树形式存储);完全二叉树由于父节点与子节点的序列存在关系,所以其底层实现也是数组;
unordered_map有哈希表实现,哈希表的本质是一个存储数据地址的数组(映射存储策略多种),所以查找效率为o(1)。
1.2 区别
map带有排序功能,在有有序要求的情况下使用map,其余情况unordered_map的效率都更高。
2 红黑树与二叉平衡树
2.1 介绍
红黑树(Red Black Tree)是一种自平衡(没有一条路径会比其它路径长出两倍)的二叉查找树,它与平衡二叉树相同的地方在于都是为了维护查找树的平衡而构建的数据结构,它的主要特征是在二叉查找树的每个节点上添加了一个属性表示颜色,颜色有两种,红与黑(颜色分布遵循一定规律)。
平衡二叉树是左右子树都为平衡二叉树,且左右子树高度相差小于1.
2.2 区别
(1)插入节点导致失衡时,二者的调整次数都为最多两次。
(2)删除节点导致失衡时,平衡二叉树复衡旋转次数未定,复杂度为log(n);红黑树的旋转次数保证了不超过三次,即旋转节点又调整节点颜色(红黑色分布遵循规律)。
(3)平衡二叉树通过保持严格的平衡,保证了较高的查找效率;而红黑树兼顾增删效率的同时牺牲了一定的查找效率。
(4)由于红黑树不是严格的二叉平衡树,相同数据时,高度总是大于等于平衡二叉树,所以占用内存也会略大一些。