set只提供一种数据类型的接口,但是会将这一个元素分配到key和value上,而且它的compare_function用 的是 identity()函数,这个函数是输入什么输出什么,这样就实现了set机制,set的key和value其实是一样 的了。其实他保存的是两份元素,而不是只保存一份元素

map则提供两种数据类型的接口,分别放在key和value的位置上,他的比较function采用的是红黑树的 comparefunction(),保存的确实是两份元素。

他们两个的insert都是采用红黑树的insert_unique() 独一无二的插入 。

multimap和map的唯一区别就是:multimap调用的是红黑树的insert_equal(),可以重复插入而map调用的则 是独一无二的插入insert_unique(),multiset和set也一样,底层实现都是一样的,只是在插入的时候调用 的方法不一样。

红黑树概念

面试时候现场写红黑树代码的概率几乎为0,但是红黑树一些基本概念还是需要掌握的。

1、它是二叉排序树(继承二叉排序树特显):

a. 若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值。

b. 若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值。

c. 左、右子树也分别为二叉排序树。

2、它满足如下几点要求:

a. 树中所有节点非红即黑。

b. 根节点必为黑节点。

c. 红节点的子节点必为黑(黑节点子节点可为黑)。

d. 从根到NULL的任何路径上黑结点数相同。

3、查找时间一定可以控制在O(logn)。