关联式容器set和map原理

1、标准的STL关联式容器分为set(集合)和map(映射表)两大类,以及这两大类衍生而来的multiset(多键集合)和multimap(多键映射表)。

2、这些容器的底层均以RB-tree(红黑树)完成。RB-tree(红黑树)也是一个独立的容器,但并不开放给外界使用。

3、此外,SGI STL还提供了一个不在标准规格之列的关联式容器:hash table(散列表),以及以此hash table 为底层机制而完成的hash_set(散列集合)hash_map(散列映射表)、hash_multiset(散列多键集合)、hash_multimap(散列多键映射表)。

4、二叉搜索树是一种特殊的二叉树,其具有如下性质:

        1) 若左子树不空,则左子树所有结点的值均小于它的根结点的值

        2)若右子树不空,则右子树所有节点的值均大于它的根节点的值

        3)左右子树也分别为二叉搜索树

5、二叉搜索树支持各种动态集合操作,包括:插入、查找、删除,其操作的时间复杂度与树的高度成正比,在遇到二叉树极端不平衡的情况下,其形状就与链表是一样的,二叉树插入、查找、删除的时间复杂度都退化为O(n)。

 6、 平衡二叉搜索树是一种特殊的二叉搜索树,其没有一个节点深度过大,不同的平衡条件,造就不同的效率表现。常见的平衡二叉搜索树有:AVL-tree和RB-tree。

7、关联容器一般以平衡二叉搜索树作为内部数据结构,RB-tree的应用尤其广泛。

8、RB-tree是许多平衡二叉查找树的一种,一颗有n个内结点的红黑树的高度至多为2log(n+1),它能保证在最坏情况下,基本的动态集合操作时间为O(logn)

9、二叉搜索树具有对数平均时间的表现,但这样的表现构造在一个假设上:输入数据有足够的随机性。

   而hash table(散列表)的数据结构,这种结构在插入、删除、搜索等操作上也具有常数时间的表现,而且这种表现是以统计为基础的,不需要依赖输入元素的随机性。

你可能感兴趣的:(C/C++)