zoukankan      html  css  js  c++  java
  • 【读书笔记】关联式容器

    关联式容器每个元素都有一个键值和一个实值(set键值就是实值),关联式容器没有所谓头尾。一般而言,关联式容器的内部结构是一个平衡二叉树。

    二叉搜索树:任何节点的键值一定大于其左子树中的每一个节点的键值,并小于其右子树中的每个节点的键值。

    RB-tree(红黑树)规则:

    1、  每个节点不是红色就是黑色。

    2、  根节点为黑色。

    3、  如果节点为红,其子节点必须为黑。

    4、  任一节点至NULL的任何路径,所含之黑节点数必须相同。

    set,所有元素都会根据元素的键值自动被排序。set元素的键值就是实值。set不允许两个元素有相同的键值。

    不能通过迭代器修改set的元素值,因为set的元素值就是其键值,关系到set元素的排列规则。如果任意改变set的元素值,会破坏set组织。

    当客户端对set进行元素新增操作或删除操作时,操作之前的迭代器在操作之后依然有效。

    map,所有元素都会根据元素的键值自动被排序。map的所有元素都是pair,同时拥有实值和键值。不允许两个元素拥有相同的键值。

    不能通过迭代器修改map的键值,但可以修改其实值。

    当客户端对map进行元素新增操作或删除操作时,操作之前的迭代器在操作之后依然有效。

    map的insert操作返回一个pair,由一个迭代器和一个bool值组成,后者表示插入是否成功,如果成功,前者即指向被插入的那个元素。

    下标操作即可以作为左值也能被作为右值。其实现是调用insert,并返回插入后的实值的引用。

    1 T& operator[] (const key_type& k)
    2 {
    3     return (*((insert(value_type(key, T()))).first)).second;
    4 }
    5 
    6  (*((insert(value_type(key, T()))).first)).second //这个实值以引用方式返回,所以作为左值和右值都可以。

    multiset,特征与用法与set一致,唯一的区别在于允许键值重复。

    multimap,特征与用法与map一致,唯一的区别在于允许键值重复。

    hashtable可视为一种字典结构。这种结构提供常数时间之基本操作。

    元素映射时发生碰撞可以通过线性探测、二次探测、开链等做法解决。

    hash_set 以hashtable为底层的set。

    hash_map以hashtable为底层的map。

    hash_multiset以hashtable为底层的multiset。

  • 相关阅读:
    Dom页面加载
    Redis
    Ubuntu下git的安装与使用
    类Xadmin插件--海豚插件
    Python基础指随笔
    前端必须掌握30个CSS3选择器
    SweetAlert插件示例
    Pylint在项目中的使用
    django Cookie、Session和自定义分页
    django创建超级用户
  • 原文地址:https://www.cnblogs.com/zhiqli/p/3106001.html
Copyright © 2011-2022 走看看