STL学习笔记(关联式容器)】的更多相关文章

关联式容器依据特定的排序准则,自动为其元素排序.缺省情况下以operator<进行比较.set multiset map multimap是一种非线性的树结构,具体的说是采用一种比较高效的特殊平衡检索二叉树--红黑树结构. 1.set set和multiset会根据特定的排序准则,自动将元素排序.两者的不同处在于multiset允许元素重复,而set不允许. template<class _Kty, class _Pr = less<_Kty>, class _Alloc = al…
layout: post title: 侯捷STL学习(九) date: 2017-07-21 tag: 侯捷STL --- 第十九节 容器rb_tree Red-Black tree是自平衡二叉搜索树. rb_tree的封装 清楚传入模板的参数列表:然后构建了一个虚空结点header KeyOfValue表示怎么从value中取出key identity函数(Gnu C独有)就是表示同一个数的意思 handle-body,采用OOP的思想,构建G4.9 一个红黑树的大小为4个字节 test R…
1.vector vector是一个线性顺序结构.相当于数组,但其大小可以不预先指定,并且自动扩展.故可以将vector看作动态数组. 在创建一个vector后,它会自动在内存中分配一块连续的内存空间进行数组存储,初始的空间大小可以预先指定也可以由vector默认指定,这个大小即capacity()函数的返回值,当存储的数据超过分配的空间时,vector会重新分配一块内存. 重新分配内存的动作: (1)申请一块更大的内存 (2)将原来的数据复制到新的内存块中 (3)销毁掉原内存块中的对象 (4)…
1.关联式容器的概念 上一篇文章讲序列式容器,序列式容器的概念与关联式容器相对,不提供按序索引.它分为set和map两大类,这两大类各自有各自的衍生体multiset和multimap,的底层机制都是用红黑树实现,红黑树是一种基本平衡的二叉搜索树,红黑树的原理wiki上讲得很清楚,书中只是把算法实现在了底层而已,在SGI STL中RB-tree是作为底层数据结构供其他容器配接用,因此关联容器可以看做都是adaptor模式的应用. 关联式容器的概念类似于关联式数据库,为获得良好的搜索效率,一般用平…
10.2.9 Map和multimap容器 map/multimap的简介 ²  map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供基于key的快速检索能力. ²  map中key值是唯一的.集合中的元素按一定的顺序排列.元素插入过程是按排序规则插入,所以不能指定插入位置. ²  map的具体实现采用红黑树变体的平衡二叉树的数据结构.在插入操作和删除操作上比vector快. ²  map可以直接存取key所对应的value,支持[]操作符,如map[key]…
一.关联式容器 标准的STL关联式容器分为set(集合)/map(映射表)两大类,以及这两大类的衍生体multiset(多键集合)和 multimap(多键映射表).这些容器的底层机制均以RB-tree(红黑树)完成.RB-tree也是一个独立容器,但并不开放给外界使用. 此外,SGI STL 还提供了一个不在标准规格之列的关联式容器:hash table (散列表),以及以此hash table 为底层机制而完成的hash_set(散列集合).hash_map(散列映射表).hash_mult…
如何选择最佳的容器类别? 缺省情况下应该使用vector.vector的内部结构简单,并允许随机存取,所以数据的存取十分方便灵活,数据的处理也够快. 如果经常要在序列的头部和尾部安插和移除元素,应采用deque.此外vector通常采用一个内存区块来存放元素,而deque采用多个区块,所以后者可内含更多的元素. 如果需要经常在容器的中段执行元素的安插.移除和移动,建议使用list. 如果经常需要根据某个准则来搜寻元素,应该使用set或multiset. 处理key/value pair,使用ma…
Effective STL 学习笔记 Item 30: 保证目标区间足够大 */--> div.org-src-container { font-size: 85%; font-family: monospace; } p {font-size: 15px} li {font-size: 14px} Table of Contents 1. 容器区间与算法 2. back_inserter 3. front_inserter 4. inserter 5. inserter & reserve…
简介 STL(Standard Template Library),即标准模版库,涵盖了常用的数据结构和算法,并具有跨平台的特点.STL是C++标准函数库的一部分,如下图所示: STL含有容器.算法和迭代器组件,其之间的合作如下图所示: STL的底层机制都是以RB-tree(红黑树)完成的.一个红黑树是一棵二叉树. 容器 标准序列式容器 字符串(string) std::string不能初始化为NULL. 向量(vector) 向量(vector) 连续存储的元素. vector和数组类似,拥有…
关联式容器(associative containers) 根据数据在容器中的排列特性,容器可分为序列式(sequence)和关联式(associative)两种. 标准的STL关联式容器分为set(集合)和map(映射表)两大类,以及两大类的衍生体multiset(多键集合)和multimap(多键映射表).这些容器的底层机制均是以RB-tree(红黑树)完成.RB-tree也是一个独立的容器,但并不开放给外界使用. 此外,SGI STL还提供一个不在规格标准之列的关联式容器:hash tab…
什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器.很简单,容器就是保存其它对象的对象,当然这是一个朴素的理解,这种“对象”还包含了一系列处理“其它对象”的方法,因为这些方法在程序的设计上会经常被用到,所以容器也体现了一个好处,就是“容器类是一种对特定代码重用问题的良好的解决方案”. 容器还有另一个特点是容器可以自行扩展.在解决问题时我们常常不知道我们需要存储多少个对象,也就是说我们…
Effective STL 学习笔记 32 ~ 33 */--> div.org-src-container { font-size: 85%; font-family: monospace; } pre.src { background-color:#f8f4d7 } p {font-size: 15px} li {font-size: 15px} Table of Contents 记得 Remove 后要 Erase remove, container, pointer 1 记得 Remo…
Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; } pre.src { background-color:#f8f4d7 } p {font-size: 15px} li {font-size: 15px} Table of Contents partial_sort nth_element stability partition 总结 1 parti…
Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor */--> div.org-src-container { font-size: 85%; font-family: monospace; } Table of Contents 1. Iterator 的类型 2. 迭代器之间的转换 3. Iterator is Special 4. 总结: 1 Iterator 的类型…
Effective STL 学习笔记: Item 22 ~ 24 */--> div.org-src-container { font-size: 85%; font-family: monospace; } Table of Contents 1. 避免 \(set \& multiset\) 在原位改变 Key 2. Consider replacing associative containers with sorted vectors 3. Choose carefully betw…
Effective STL 学习笔记 Item 21:Comparison Function 相关 */--> div.org-src-container { font-size: 85%; font-family: monospace; } Table of Contents 1. Always have comparison functions return false for equal values 2. Strict Weak Ordering 1 Always have compar…
Effective STL 学习笔记:19 ~ 20 */--> div.org-src-container { font-size: 85%; font-family: monospace; } Table of Contents 1. Item 19: 相等 (Equality) 与等价 (Equivalence) 2. Item 20: Specify Comparison Type for Associative containers of pointers 1 Item 19: 相等…
关于STL算法需要注意的是: (1) 所有STL算法被设计用来处理一个或多个迭代器区间.第一个区间通常以起点和终点表示,至于其他区间,多数情况下只需提供起点即可,其终点可自动以第一区间的元素数推导出来,故调用者必须确保区间的有效性. (2) STL算法采用覆盖模式(overwrite),而非安插模式(insert).所以调用者必须保证目标区间拥有足够的元素区间. (3) 所有的算法处理的都是半开区间[begin,end). 下面逐一介绍一些常用的算法: for_each算法 for_each(I…
1.概述 STL是通用类模版和算法的集合,它提供给程序员一些标准的数据结构和算法的实现.STL三大关键组成: 容器(Containers),用来管理类对象的集合 迭代器(Iterators),用来在一个对象群集的元素上进行遍历动作.迭代器的主要好处是,为所有容器提供了一组很小的公共接口,利用这个接口,某项操作就可以行进至群集的下一个元素.迭代器的接口和一般的指针差不多,以operator++累进,以operator*提取所指的值. 算法(Algorthms),用来处理群集里的元素. STL的基本…
stl中set和map为关联式容器,会根据排序准将元素自动排序.原型如下: template<class _Kty, class _Pr = less<_Kty>, class _Alloc = allocator<_Kty> > class set template<class _Kty, class _Ty, class _Pr = less<_Kty>, class _Alloc = allocator<pair<const _Kty…
算法头文件 要运用C++标准程序库的算法,首先必须包含头文件<algorithm> 使用STL算法时,经常需要用到仿函数以及函数配接器.它们定义域<functional>头文件中. 算法的分类 可以按以下分类方式描述各个STL算法: 非变动性算法(nonmodifying algorithms) 变动性算法(modifying algorithms) 移除性算法(removing algorithms) 变序性算法(mutating algorithms) 排序算法(sorting…
STL组件 若干精心勾画的组件共同合作,构筑起STL的基础.这些组件最关键的是容器.迭代器和算法. 下图演示了STL组件之间的合作 容器(Containers) 容器类别(简称容器)用来管理一组元素.为了适应不同需求,STL提供了不同类型的容器. 总的来说,容器可分为两类: 1.序列式容器Sequence containers,此乃可序群集,其中每个元素均有固定位置(取决于插入时机和地点,和元素值无关). STL提供三个定义好的序列式容器:vector.deque和list. 2.关联式容器As…
STL的概念 源地址  https://www.ev0l.art/index.php/archives/15/ <li> Iterator (迭代器)<li> Container (容器) array<li> Alogrithm (算法)<li> Adapters (配接器) 用来实现容器之间的转接 面向过程-->面向对象->基于对象->泛型 代码 #include <iostream> #include <vector&…
标准模板库(STL)学习探究之vector容器  C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据.为了可以使用vector,必须在你的头文件中包含下面的代码:#include <vector>构造函数. Vectors 包含着一系列连续存储的元素,其行为和数组类…
map是一类关联式容器,自动建立Key - Value的对应 , key 和 Value可以是任意你需要的类型.下面介绍 map 中一些常用的函数: 一.map 中的 begin 和 end 函数 map<char , int> m ; m['a'] = 100 ; m['b'] = 200 ; m['c'] = 300 ; m.begin() -> first;      // 输出第一个元素的键值 m.begin() -> second ;    // 输出第一个元素的 val…
Go学习笔记06-内建容器 Go语言 数组 *切片(Slice) #F44336 Slice的操作 Map map示例 字符处理 数组 定义数组: //这样定义数组编译器自动初始化每个元素为0  var arr1 [5]int  //这样定义数组需要手动初始化数组  arr2 := [3]int{1, 3, 5}  //这样可以让编译器自动计算数组长度  arr3 := [...]int{2, 4, 6, 8, 10}  //定义二维数组  var grid [4][5]bool  ·数量写在类…
参考:http://www.weixueyuan.net/view/6404.html 总结: 基本的关联式容器主要有:set.multiset.map和multimap,这四种容器可以分为两组:map和set. set可以理解为我们数学中的集合,它可以包含0个或多个不重复.不排序的数据,这些数据被称为键值. map也是一种集合,它同样可以包含0个或多个不排序的元素对,每一个元素对有一个键值和一个与键值相关联的值,在map中键值是不允许重复的. 而multiset则是允许重复的集合,multim…
Effective STL 学习笔记 39 ~ 41 */--> div.org-src-container { font-size: 85%; font-family: monospace; } pre.src { background-color:#2e3436; color:#fefffe; } p {font-size: 15px} li {font-size: 15px} Table of Contents Make Predicate pure Function Make Funct…
Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value */--> div.org-src-container { font-size: 85%; font-family: monospace; } pre.src { background-color:#f8f4d7 } p {font-size: 15px} li {font-size: 15px} 严格来讲, C 和 C++ 都不支持将函数作为参数,真正作为…
Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据 */--> div.org-src-container { font-size: 85%; font-family: monospace; } pre.src { background-color:#f8f4d7 } p {font-size: 15px} li {font-size: 15px} 有些个算法对有序的和无序的数据都能应用,但多数情况下,他们在输入数据有序时才最有用. 下列算法要求输入数据必须有序…