



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
关联容器总结关联容器和顺序容器的本质区别在于:关联容器通过键(key)存储和读取元素,二顺序容器则通过元素在容器中的位置顺序存储和访问元素。两个基本的关联容器类型是map和set,map的元素以键-值(keyvalue)对的形式组织:键用作元素在map中的索引,而值则表示所存储和读取的数据。set仅包含一个键,并有效地支持关于某个键是否存在的查询。set和map类型的对象所包含的元素都与有不同的键,不允许为同一个键添加第二个元素。如果一个键必须对应多个实例,则需使用multimap或multiset类型,这两种类型允许多个元素拥有相同的键。1.关联容器的类型:map :关联数组:元素通过键值来存储和访问set :大小可变的集合,支持通过键实现的快速读取multimap:支持同一个键多次出现的map类型multiset :支持同一个键多次出现的set类型注:一般,如果希望有效地存储不同值的集合,那么使用set容器比较合适,而map容器则更适用于需要存储(乃至修改)每个键所关联的值的情况。2.pair类型pair类型与容器一样,也是一种模板类型。但与之前介绍的容器不同,在创建pair对象时,必须提供两个类型名:pair对象所包含的两个数据成员各自对应的类型名字,这两个类型不必相同。pair类型定义在utility头文件中。pair类型提供的操作:(1)pairp1 创建一个空的pair对象,它的两个元素分别是T1和T2类型,采用值初始化。(2)pairp1(v1,v2) 创建一个pair对象,它的里两个元素分别是T1和T2类型,其中first成员初始化为v1,second成员初始化为v2(3)make_pair(v1,v2) 以v1和v2值创建一个新的pair对象,其中元素类型分别是v1和v2类型(4)p1p2 两个pair对象之间的小于运算,其定义遵循字典次序:如果p1.firstp2.first或者!(p2.firstp1.first)&p1.secondp2.second,则返回true。(5)p1=p2 如果两个pair对象的first和second成员一次相等,则这两个对象相等。该运算使用其元素的=操作符。(6)p.first 返回p中的名为first的共有数据成员(7)p.second 返回p中的名为second的共有数据成员3.关联容器与顺序容器关联容器共享大部分但并非全部的顺序容器操作。关联容器不提供front、push_front、pop_front、back、push_back以及pop_back操作。顺序容器和关联容器公共的操作包括下面几种:(1) 顺序容器中描述的关系运算(2) 顺序容器中描述的begin、end、rbegin、rend操作(3) 顺序容器中列出的类型别名的操作。注意,这里对于map容器,value_type并非元素的类型,而是描述键及其关联值类型的pair类型。(4) 顺序容器中描述的swap和复制操作,但关联容器不支持assign函数(5) 顺序容器中列出的clear和erase操作,但关联容器的erase运算返回void类型(6) 顺序容器中列出的关于容器大小的操作,但resize函数不能用于关联容器。除了上面列出的操作外,关联容器还提供了其他的操作,而对于顺序容器也提供相同的操作,关联容器也重新定义了这些操作的含义或返回类型,其中的差别在于关联容器中使用了键。4.map类型构造函数(1)mapm 创建一个名为m的空map对象,其键值和值的类型分别为k和v。(2)mapm(m2)创建m2的副本m,m和m2必须有相同的键类型和值类型。(3)mapm(b,e)创建map类型的对象m,存储迭代器b和e标记范围内的所有元素的副本。元素的类型必须转换为pair.在实际应用中键类型必须定义操作符,而且该操作符应能够正确地工作。5.map类型map定义的类型(其中key_type,mapped_type是map额外定义的两种类型)(1)map:key_type map容器map中,用做索引的键类型(2)map:mapped_type 容器map中,键所关联的值的类型(3)map:value_type 一个pair类型,它的first元素具有const map:key_type 类型,而second元素则为map:mapped_type类型注:谨记value_type是pair类型,它的值成员可以修改,但键成员不能修改。6.map类型使用下标和使用迭代器的解引用访问map对象:如同其他下标操作符一样,map的下标也是用索引(其实就是键)来获取改键所关联的值,如果该键已在容器中,则map的下标运算与vector的下标运算行为相同:返回该键所关联的值;如果该键不存在,map容器将为该键创建一个新的元素,并将它插入到此map对象中,此时所关联的值采用值初始化:类类型的元素用默认构造函数初始化,而内置类型的元素则初始化为0。有别于vector和string类型,map下标操作符返回的类型与对map迭代器进行解引用获得的类型不同。对map的迭代器进行解引用将获得一个pair对象,它的first存放键,为const,而second存放值。下面分别给出map的迭代器解引用和下标访问的例子:(1) 迭代器解引用:/get an iterator to an element in word_countmap:iterator map_it=word_count.begin();/*map_it is a reference to a pairobject coutfirst;cout second;map_it-first=new key;/error:key is const +map_it-second/ok:we change value through an iterator(2) 下标访问:mapword_count;/empty map/insert default Initialized element with key Anna;then assign 1 to its value word_countAnna=1;这里将发生以下事情:a)在word_count中查找键位Anna的元素,没有找到。b)将一个新的键-值对插入到word_count中。它的键值是const string类型的对象,保存Anna。而它的值则采用值初始化,这里意味着在本例中值为0c)将这个新的键-值对插入到word_count中d)读取新插入的元素,并将它的值赋为1.7.map类型map:insert的使用map容器的insert操作和顺序容器的类似,但是要注意:必须考虑键的作用。键影响了实参的类型:插入单个元素的insert版本使用键-值pair类型的实参。类似地,对于参数为一对迭代器的版本,迭代器必须指向键-值pair类型的元素。另一个差别则是:map容器的接受单个值的insert版本的返回类型问题。map容器提供的insert操作:(1)m.insert(e) e是一个用在m上的value_type类型的值。如果键e.first不在m中,则插入一个值为e.second的新元素;如果该键在m中已存在,则保持m不变。该函数返回一个pair类型对象,包含指向键为e.first的元素的map迭代器,以及一个bool类型的对象,表示是否插入了该元素。(2)m.insert(beg,end) beg和end是标记元素范围的迭代器,其中的元素必须为m.valur_type类型的键值对。对于该范围内的所有元素,如果他的键在m中不存在,则将该键及其关联的值插入到m。返回void。(3)m.insert(iter,e) e是一个用在m上的value_type类型的值。如果键e.first不在m中,则创建新元素,并以迭代器iter为起点搜索新元素存储的位置。返回一个迭代器,指向m中具有给定键值的元素。8.查找并读取map中的元素:显然,下标操作符给出了读取一个值的最简单的方法,然而这也会带来很危险的副作用:如果该键值不在map容器中,那么下表操作会插入一个具有该键的新元素。map容器提供了两个操作:count和find,用于检查某个键值是否存在而不会插入该键。(1)m.count(k) 返回m中k出现的次数,对于map来说只能返回0或1.(2)m.find(k) 如果m容器中存在k索引的元素,则返回指向钙元素的迭代器。如果不存在,则返回超出末端迭代器。9.从map对象中删除元素(1)m.erase(k) 删除m中键值为k的元素。返回size_type类型的值,表示删除元素的个数。(2)m.erase(p) 从m中删除迭代器p所指向的元素。p必须指向m中确定存在的元素,而且不能等于m.end().返回void类型。(3)m.erase(b,e) 从m中删除一段范围内的元素,该范围由迭代器对b和e标记。b和e必须标记m中的以段有效范围:即b和e都必须指向m中的元素或最后一个元素的下一个位置。而且,b和e要么相等(此时删除的范围为空),要么b所指的元素必须出现在e所指的元素之前。返回void类型。10.map对象的迭代遍历与其他容器一样,map同样提供begin和end运算,以生成用于遍历整个容器的迭代器。在使用迭代器遍历m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 黑马javaweb考试题及答案
- 核磁考试题及答案
- 国画书法考试题及答案
- 农村环保项目治理及技术引进合同
- 法语课堂考试题及答案
- 客户服务热线接听流程快速响应手册
- 完善的供应链风险管理控制矩阵
- 德国作曲考试题及答案
- 内科护理学各章考试题库及答案
- 主管护师护理学讲题题库及答案
- GB/T 2878.1-2025液压传动连接普通螺纹斜油口和螺柱端第1部分:斜油口
- 2025年铁路货装值班员(高级)职业技能鉴定参考试题库(含答案)
- 转让叉车协议书模板
- 2025交通无障碍技术规范
- 《传统中医手诊》课件
- T-FSF 003-2024 杂交石斑鱼人工育苗技术规范
- T-CIRA 41-2022 同位素生产回旋加速器液态靶验收规范
- 伊斯兰教完整版本
- 计量经济学知到智慧树章节测试课后答案2024年秋安徽农业大学
- 《西方的文官制度》教学设计
- 外研版九年级英语上册单元模块满分必刷题 Module 1 【刷中考】(广东专用)(含答案)
评论
0/150
提交评论