map是C++STL中的一种关联容器,也就是存key-value键值对的映射表容器,有map和multimap,它们之间的区别是map不允许key重复,multimap是允许key重复的;map的底层是一颗红黑树,一种非严格的平衡二叉树,左右子树的高度差不能超过较短子树高度的2倍,数据的增删查效率都比较高,平均时间复杂度在O(log2n)。在此给出红黑树的定义:
1)每个结点要么是红的,要么是黑的。
2)根结点是黑的。
3)每个叶结点,即空结点(NIL)是黑的。
4)如果一个结点是红的,那么它的俩个儿子都是黑的。
5)对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点。
红黑树不像AVL(平衡二叉树)树那样维持了二叉树的高度平衡(左右子树的高度差不能超过1),因此在插入删除数据时,所做的旋转操作比起红黑树来说,那就少很多了,因此其效率也比AVL树高;红黑树插入一个新节点,旋转的次数最多2次,删除一个节点旋转的次数最多3次。