关联容器我们可以看做是一个小型的数据库,它就是用key找value,编译器底层对于关联容器的实现有两种:红黑树(Red-Block tree)和哈希表(hash table,散列表)。

一、红黑树简单介绍

  红黑树是高度平衡二叉树,左子树和右子树都是保持高度平衡的,不会出现某一个分支太长,并提供有迭代器,便利迭代器时红黑树是排好序的,,也就是说我们用红黑树做map和set的底层结构能够很方便的查找。

  注意:红黑树的元素值我们一般是不去改变(通过迭代器)的,因为元素是有序的,但是没有说不可以,因为元素是由key和data两部分合起来(合起来统称为value)组成的,而我们仅仅只能改变data部分,而key是不能变得。

二、Set、Multiset

2.1 基本介绍

  注意:因为set使用红黑树做底部结构,但是set只有一个元素(key和data是一样得,也就是说key就是value),所以set是不允许改变元素值得,所以在实现上,set的迭代器拿到的是const的iterator,是不能修改的。

2.2 内部结构介绍

  因为set本身不干活,他只是相当于一个中介作用,把事交给红黑树才做,所以又称为一种容器适配器

2.3 使用示例

三、Map、Multimap

3.1 基本介绍

  注意:因为map使用红黑树做底部结构,map的元素由key和data两部分组成(称为value),用户使用时指定的key和data被内部封装成了pair,而key拿到的是const iterator不允许用户改变,data部分是可以通过迭代器改变的。

3.2 内部结构介绍

3.3 使用示例

3.4 map和multimap区别点

  multimap不可以使用下表操作符[],而map可以使用,中括号操作符作用:如果map中有这个key,则返回这个key关联的data,如果不存在则会在适当位置创建这样一个pair(key,默认值的data),中括号操作符如下:

3.5 中括号[]和insert哪个效率高

  insert效率高于中括号,因为中括号其实是先进行了lower_bound(二分搜寻)之后,再调用insert插入元素。

C++标准库分析总结(六)——<Map、Multimap、Set、Multiset设计原则>的更多相关文章

  1. C++标准库分析总结(三)——<迭代器设计原则>

    本节主要总结迭代器的设计原则,以及iterstor traits的设计作用 1.迭代器遵循的原则 迭代器是算法和容器的桥梁,它是类模板的设计,迭代器必须有能力回答算法提出的问题才能去搭配该算法的使用 ...

  2. C++标准库分析总结(一)

    之前学习过标准库,最近身边有人问到相关话题,故在此做一个总结 1 标准库介绍 C++标准库:C++ Standard Library C++标准模板库:Standard Template Librar ...

  3. STL标准库-容器-set与map

    STL标准库-容器-set与multiset C++的set https://www.cnblogs.com/LearningTheLoad/p/7456024.html STL标准库-容器-map和 ...

  4. iBinary C++STL模板库关联容器之map/multimap

    目录 一丶关联容器map/multimap 容器 二丶代码例子 1.map的三种插入数据的方法 3.map集合的遍历 4.验证map集合数据是否插入成功 5.map数据的查找 6.Map集合删除元素以 ...

  5. golang标准库分析之net/rpc

    net/rpc是golang提供的一个实现rpc的标准库.

  6. C++标准库分析总结(八)——<仿函数、适配器、istream_iterator、ostream_iterator、bind>

    一.仿函数定义 仿函数是STL中最简单的部分,存在的本质就是为STL算法部分服务的,一般不单独使用.仿函数(functors)又称为函数对象(function objects),虽然函数指针虽然也可以 ...

  7. C++标准库分析总结(五)——<Deque、Queue、Stack设计原则>

    本节主要总结标准库Deque的设计方法和特性以及相关迭代器内部特征 1.Deque基本结构 Deque(双向队列)也号称连续空间(其实是给使用者一个善意的谎言,只是为了好用),其实它使用分段拼接起来的 ...

  8. C++标准库分析总结(四)——<Vector、Array、Forward_list设计原则>

    本节主要总结标准库Vector和Array的设计方法和特性以及相关迭代器内部特征 1.Vector 1.1 Vector 内部实现 Vector是自增长的数组,其实在标准库中没有任何一种容器能原地扩充 ...

  9. C++标准库分析总结(九)——<HashFunction、Tuple>

    一.HashFunction 当我们在使用hash table以及由它做底层的数据结构时,我们必不可少要讨论hash function,所谓的哈希函数就是产生一个数,这个数越乱越好,以至于达到避免碰撞 ...

随机推荐

  1. CCF 2017-03-1 分蛋糕

    CCF 2017-03-1 分蛋糕 题目 问题描述 小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为a1, a2, -, an.小明想分给每个朋友至少重量为k的蛋糕.小 ...

  2. dapper 参数不定时用这种方法动态参数

    string where = null; var p = new DynamicParameters(); if (classId != null) { where = " and clas ...

  3. Jlink调试S5PV210

    安装CDT C/C++ Development Toolkit,使eclipse可以开发C/C++项目 Help–>Install New Software中输入:http://download ...

  4. 父类调用子类的常量 lumen查询数据库方式

    我要在一个基类里面实例化所有的model 要根据集成的对象定义的model实例化 BaseRepository.php <?php namespace App\Repository; class ...

  5. Java中的File操作总结

    1.创建文件 import java.io.File; import java.io.IOException; public class CreateFileExample { public stat ...

  6. vue-quill-editor + iview 实现富文本编辑器及图片上传

    1.npm 安装 vue-quill-editor npm install vue-quill-editor 2.再main.js中引入 import VueQuillEditor from 'vue ...

  7. SQL Server 2005的几个新功能

    SQL Server 2005相对于SQL Server 2000改进很大,有些还是非常实用的. 举几个例子来简单说明 这些例子我引用了Northwind库. 1. TOP 表达式  SQL Serv ...

  8. 分享私藏多年的Markdown编辑器

    相信很多人都使用 Markdown 来编写文章,Markdown 语法简洁,使用起来很是方便,而且各大平台几乎都已支持 Markdown 语法 那么,如何选择一款趁手的 Markdown 编辑器,就是 ...

  9. POJ1185 炮兵阵地 和 POJ2411 Mondriaan's Dream

    炮兵阵地 Language:Default 炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 34008 Accepted ...

  10. LeetCode 317. Shortest Distance from All Buildings

    原题链接在这里:https://leetcode.com/problems/shortest-distance-from-all-buildings/ 题目: You want to build a ...