20170423STL016_STL_关联容器

来源:互联网 发布:网络摄像机排行榜 编辑:程序博客网 时间:2024/05/21 22:51

Tree:

    1:树也是一种容器,与数组,链表一样,是一种数据结构单元,VS里面使用的树是红黑树。
    2:红黑树,左边放较小的,右边放较大的。
    3:如果仅仅是小的左边大的右边,就可能导致生成二叉非平衡树,深度树等,都是非平衡的。如果要生成平衡树1,就需要一些方法。
    4:插入元素的时候可以先插在父节点的左边,后面的元素再插在右边,不符合要求就进行旋转,最后会生成绝对平衡二叉树。这种树就是红黑树。
    5:每三个节点都会旋转了成嘴边最小,右边最大,中间其次的位置,最后红黑树最左边的节点是0节点。
    6:set和map起始就是树的容器适配器。
template<class _Value_type,class _Voidptr>struct _Tree_node{// tree node_Voidptr _Left;// left subtree, or smallest element if head_Voidptr _Parent;// parent, or root of tree if head_Voidptr _Right;// right subtree, or largest element if headchar _Color;// _Red or _Black, _Black if headchar _Isnil;// true only if head (also nil) node_Value_type _Myval;// the stored value, unused if headprivate:_Tree_node& operator=(const _Tree_node&);};

set:

    1:set在使用的时候看起来是没有key_value的,但实际上有key_value和alue_type,只是他们类型一样。
    2:tree里面出了一个node外,还放了一个比较方法。否则没办法进行判断和旋转。
    3:数据写入只能通过insert,只有是有序的容器才可以使用push_back等,tree没有最开始也没有末尾,因为他需要自动排序,把添加的数据顺序打乱。
    4:set里面不允许有重复的数据。会自动删除重复的。
    5:如果有需求要求可以重复,那么就可以用multi_set。它里面的数据允许重复。两个区别在于类继承于_Tree的地方,最后一个参数传的的set为false,multi_set传递的是true。他决定是否可以有重复的key值。
    6:set里面的数据确定之后,就不能通过迭代器来修改里面的数据了。红黑树的设计原则就是确定之后就不能改,否则排列好的已序空间就会编程无序的了。

map:

    1:与set的区别就是传递了两个类型,有key_value,其他的都很类似。
    2:map的insert需要插入的最终就是一个pair,而且如果两次插入的pair的键值一样,则后面一次插入就不会插入。
    3:insert_or_assign(),插入或者赋值(C++14),如果没有,就是插入,有的话就是赋值。
    4:map的下标访问([])实际就是通过键来访问的,下标就是键值,可以通过下标来对对应的值来赋值



0 0
原创粉丝点击