C/C++知识要点2——STL中Vector、Map、Set容器的实现原理
1、Vector是顺序容器。是一个动态数组。支持随机存取、插入、删除、查找等操作,在内存中是一块连续的空间。在原有空间不够情况下自己主动分配空间。添加为原来的两倍。vector随机存取效率高,可是在vector插入元素。须要移动的数目多。效率低下。
注意:vector动态添加大小时。并非在原空间之后持续新空间(由于无法保证原空间之后尚有可供配置的空间),而是以原大小的两倍另外配置一块较大的空间,然后将原内容拷贝过来。然后才開始在原内容之后构造新元素,并释放原空间。
因此。对vector的不论什么操作,一旦引起空间又一次配置,指向原vector的全部迭代器就都失效了。
2、Map是关联容器,以键值对的形式进行存储,方便进行查找。关键词起到索引的作用,值则表示与索引相关联的数据。以红黑树的结构实现,插入删除等操作都在O(logn)时间内完毕。
注意:map的下标操作。其行为与vector非常不同样:使用一个不在容器中keyword作为下标,会加入一个具有此keyword的元素到map中。
一般使用find函数取代下标操作。
3、Set是关联容器,set中每一个元素仅仅包括一个keyword。set支持高效的keyword查询操作——检查一个给定的keyword是否在set中。
set也是以红黑树的结构实现。支持高效插入、删除等操作。
关于Map、Set,STL提供8个关联容器,这8个关联容器的不同之处体如今三个维度上面:
- 或者是一个set,或者是一个map
- 或者要求不反复的keyword,或者同意反复的keyword
- 按顺序保存,或无序保存
|
按keyword有序保存元素 |
|
|
map
|
关联数组,保存keyword-对
|
|
set
|
keyword即值,即仅仅保存keyword的容器
|
|
multimap
|
keyword可反复出现的map
|
|
multiset
|
keyword可反复出现的set |
| 无序集合 |
|
|
unordered_map
|
用哈希函数组织的map
|
|
unordered_set
|
用哈希函数组织的set |
|
unordered_multimap
|
哈希组织map,keyword可反复出现 |
|
unordered_multiset
|
哈希组织set,keyword可反复出现
|
C/C++知识要点2——STL中Vector、Map、Set容器的实现原理的更多相关文章
- C++ STL中vector(向量容器)使用简单介绍
原文:http://www.seacha.com/article.php/knowledge/cbase/2013/0903/2205.html C++ vector(向量容器)是一个线性顺序结构.相 ...
- C++的STL中vector内存分配方法的简单探索
STL中vector什么时候会自动分配内存,又是怎么分配的呢? 环境:Linux CentOS 5.2 1.代码 #include <vector> #include <stdio ...
- STL中vector、list、deque和map的区别
1 vector 向量 相当于一个数组 在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capac ...
- 【转】STL中vector、list、deque和map的区别
1.vector 向量 相当于一个数组 在内存中分配一块连续的内容空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacity()函数 ...
- STL 中的map 与 hash_map的理解
可以参考侯捷编著的<STL源码剖析> STL 中的map 与 hash_map的理解 1.STL的map底层是用红黑树存储的,查找时间复杂度是log(n)级别: 2.STL的hash_ma ...
- STL中的map和unordered_map
STL中的map和unordered_map map 头文件:#include 原理:std::map的内部实现了一颗红黑树,有对其键值进行排序的功能,所以map是一个有序的容器,map中的每一个元素 ...
- STL中vector的赋值,遍历,查找,删除,自定义排序——sort,push_back,find,erase
今天学习网络编程,那个程序中利用了STL中的sort,push_back,erase,自己没有接触过,今天学习一下,写了一个简单的学习程序.编译环境是VC6.0 这个程序使用了vect ...
- STL中 vector 和 list 一些特性
STL中的vector特点是: 其容量在需要时可以自动分配,本质上是数组形式的存储方式.即在索引可以在常数时间内完成.缺点是在插入或者删除一项时,需要线性时间.但是在尾部插入或者删除,是常数时间的. ...
- STL中vector、list、map、set区别(转载)
list封装了链表,vector封装了数组, list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[].vector对于随机访 ...
随机推荐
- Python对Dict排序
对下面的Dict: aps = {} for key in T.keys(): ap = average_precision(T[key], P[key]) aps[key] = ap 如果用valu ...
- Codeforces Round #877 (Div. 2) E. Danil and a Part-time Job
E. Danil and a Part-time Job 题目链接:http://codeforces.com/contest/877/problem/E time limit per test2 s ...
- LeetCode101--对称二叉树
''' 给定一个二叉树,检查它是否是镜像对称的. ''' class TreeNode: def __init__(self, x): self.val = x self.left = None se ...
- HDU 4283 区间DP You Are the One
题解 我使用记忆化搜索写的.
- 利用pytorch复现spatial pyramid pooling层
sppnet不讲了,懒得写...直接上代码 from math import floor, ceil import torch import torch.nn as nn import torch.n ...
- BestCoder Round #36
HDU5198 Strange Class 问题描述 在Vivid的学校里,有一个奇怪的班级(SC).在SC里,这些学生的名字非常奇怪.他们的名字形式是这样的anbncn(a,b,c两两不相同.).例 ...
- 刷题总结——选课(ssoj树形dp+记忆化搜索+多叉树转二叉树)
题目: 题目描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了 N(N<300)门的选修课程,每个学生可选课程的数量 M 是给定的.学生选修了这M门课 ...
- 【bzoj1854】[Scoi2010]游戏 - 并查集
lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备最多只能使 ...
- 使用vue-cli创建项目(包含npm和cnpm的安装nodejs的安装)
转:http://www.cnblogs.com/wisewrong/p/6255817.html vue-cli 是一个官方发布 vue.js 项目脚手架,使用 vue-cli 可以快速创建 vue ...
- Python 可变对象与不可变对象
1. 不可变(immutable):int.字符串(string).float.(数值型number).元组(tuple) 可变(mutable):字典型(dictionary).列表型(list) ...