关联容器顺序容器的差别在于:关联容器通过键(key)存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素。

1、关联容器支持通过键来高效地查找和读取元素。两个基本的关联容器类型是map和set。map中的元素以键—值对的形式组织:键用作元素在map中的索引,而值则表示所存储和读取的数据。set仅包含一个键,并有效地支持关于某个键是否存在的查询。

【注】关联容器中“容器元素根据键的次序排列”这一事实就是一个重要的结论:在迭代器遍历关联容器时,我们可以确保按键的顺序访问元素,而与元素在容器中的存放位置完全无关。

2、关联容器类型

map           关联数组,元素通过键来存储和读取;                   适用于需要存储乃至修改每个键所关联的值的情况

set             大小可变的集合,支持通过键实现和快速读取                  可以存储不同值的集合

multimap    支持同一个键多次出现的map类型

multiset      支持同一个键多次出现的set类型

3、与关联容器相关的一个标准库类型——pair类型,

pair是一种模板类型,以下是pair类型提供的操作

pair<T1,T2> p1;     创建一个空的pair对象,它的两个元素分别是T1和T2类型,采用值初始化
pair<T1,T2> p1(v1,v2); 创建一个pair对象,它的两个元素分别是T1和T2类型,其中,first成员初始化为v1,而second成员初始化为v2.
make_pair(v1,v2) 以v1和v2值创建一个新的pair对象,其元素类型分别为v1和v2的类型
p1<p2 两个pair对象之间的小于运算,其定义遵循字典顺序:如果p1.first<p2.first或者!(p2.first<p1.first)&&p1.second<p2.second,则返回true
p1==p2 如果两个pair对象的first和second成员依次相等,则这两个对象相等
p.first 返回p中名为first的(公有)数据成员
p.second 返回p的名为second的(公有)数据成员

4、map类型(map是键——值对的集合)

1)、map对象的定义

map < string, int > word_count;

这个语句定义了一个名为word_count的map对象,由string类型的键索引,关联的值则为int型。

【注】在实际应用中,键类型必须定义<操作符,而且该操作符应能“正确地工作”这一点很重要。

2)map定义的类型

map对象的元素是键——值对,也即每个元素包含两个部分:键以及由键关联的值。

map类定义的类型如下:

map < K, V>::key_type     在map类型中,用作索引的键的类型
map < K, V>::mapped_type 在map容器中,键所关联的值的类型
map < K, V>::value_type 一个pair类型,它的first元素具有const map<K,V>::key_type类型,而second元素则为map<K,V>::mapped_type类型

【注】对map迭代器进行解引用将产生pair类型的对象;map<string,int>::key_type 其实就是string类型,用这种方法可以用map类型来定义额外的数据类型

3)、用insert成员给map容器添加元素

4)、使用下标访问map对象

使用下标访问map: 用下标访问不存在的元素将导致在map容器中添加一个新的元素,它的键即为该下标值。

【注】1、下标操作符返回一个mapped_type类型的值

5)map::insert的使用

map容器提供的insert操作:

m.insert(e)     e是一个用在m上的value_type类型的值,如果键e.first不在m中,则插入一个值为e.second的新元素;如果该建在m中已存在,则保持m不变。
此函数返回一个pair类型的对象,包含指向键为e.first的元素的map迭代器,以及一个bool类型的对象,表示是否插入了该元素。 m.insert(beg,end) beg和end是标记元素范围的迭代器,其中的元素必须为m.value_type类型的键——值对。对于该范围的迭代器,如果它的键在m中不存在,则将该键及其关联的值插入到m中,返 回void类型 m.insert(iter,e) e是一个用在m上的value_type类型的值,如果键e.first不在m中,则插入一个值为e.second的新元素;并以迭代器iter为起点搜索新元素存储的位置。返回一个迭代器,指向m 中具有给定键的元素

6)、查找并读取map中的元素

m.count(k)    返回m中k的出现次数
m.find(k) 如果m容器中存在按k索引的元素,则返回指向该元素的迭代器。如果不存在,则返回超出末端迭代器

7)、从map中删除元素

m.erase(k)      删除m中键为k的元素,返回size_type类型的值,表示删除元素的个数。
m.erase(p) m.erase(b,e)

append() 方法

append()方法在被选元素的结尾(仍然在内部)插入指定内容。

关联容器 // append方法的更多相关文章

  1. C++ 关联容器

    <C++ Primer 4th>读书笔记 关联容器和顺序容器的本质差别在于:关联容器通过键(key)存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素. 关联容器(Ass ...

  2. C++ Primer : 第十一章 : 关联容器之概述、有序关联容器关键字要求和pair类型

    标准库定义了两种主要的关联容器:map和set map中的元素时一些关键字-值(key-value)对,关键字起到索引的作用,值则表示与索引相关的数据.set中每个元素只包含一个关键字,可以完成高效的 ...

  3. 使用multimap创建重复键关联容器

    在“使用 <map> 库创建关联容器”一文中,我们讨论了标准库中的 map 关联容器.但那只是 map 容器的一部分.标准库还定义了一个 multimap 容器,它与 map 类似,所不同 ...

  4. C++ 之关联容器 map

    标准库定义了四种关联容器:map是其中之一(另外还有set.multimap.multiset).map的元素以键-值(key-value),在学了顺序容器之后,再学习关联容器,就比较比较好理解了. ...

  5. ###STL学习--关联容器

    点击查看Evernote原文. #@author: gr #@date: 2014-08-23 #@email: forgerui@gmail.com STL中的关联容器. ###stl学习 |--迭 ...

  6. C++ Primer 5th 第11章 关联容器

    练习11.1:描述map 和 vector 的不同. map是关联容器,vector是顺序容器,关联容器与值无关,vector则与值密切相关 练习11.2:分别给出最适合使用 list.vector. ...

  7. C++关联容器<map>简单总结

    C++关联容器<map>简单总结 map提供大小可变的关联容器,基于关联键值高效检索元素值.当你处理键值对的数据是,都可以考虑使用map关联容器. 特点: 大小可变的关联容器,基于关联键值 ...

  8. 高放的c++学习笔记之关联容器

    标准库提供8个关联容器 按关键字有序保存有(红黑树实现) set map multset 关键字可重复出现的set multimap  关键字可重复出现的map 无序保存 哈希实现 unorderre ...

  9. C++关联容器知识总结

    C++的容器类型可以分为顺序容器和关联容器两大类.顺序容器的知识可以参看我上篇的随笔<C++顺序容器知识总结>.关联容器支持通过键值来高效的查找和读取元素,这是它和顺序容器最大的区别.两种 ...

随机推荐

  1. JSON初体验(三):FastJson解析

    JSON解析之FastJson(阿里巴巴解析开源) 特点: Fastjson是一个Java语言编写的高性能功能完善的JSON库,它采用的 是一种"假定有序快速匹配"的算法,把JSO ...

  2. Solr第二讲——SolrJ客户端的使用与案例

    一.Solrj的使用 1.什么是Solrj solrj是访问Solr服务的java客户端(就像通过jedis操作redis一样),提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过Sol ...

  3. Jedis+Redis+spring缓存

    Redis程序使用它?Jedis 访问redis java api Redis-server & //后台运行防火墙要关闭 ts-parent的pom.xml加上jedis依赖 <dep ...

  4. Prism for WPF 搭建一个简单的模块化开发框架(六)隐藏菜单、导航

    原文:Prism for WPF 搭建一个简单的模块化开发框架(六)隐藏菜单.导航 这个实际上是在聊天之前做的,一起写了,也不分先后了 看一下效果图,上面是模块主导航,左侧是模块内菜单,现在加一下隐藏 ...

  5. 天津Uber优步司机奖励政策(12月14日到12月20日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  6. 最新flowable研究学习及其汉化flowable6.3中文

    flowable 是activiti的分支,现在感觉比activiti要强大一些,官网是 https://flowable.org/ 下载最新的6.31版本. 放到tomcat下面,汉化需要对flow ...

  7. ASP.NET数据库连接

    启动Visual Studio,新建一个web工程 点开工程目录下web.config文件, 找到节点,新增数据库配置 aspx界面新建一个button和一个文本框用于测试数据库连接, 其中butto ...

  8. pygame安装【在pycharm的IDE project下】

    pygame安装[在pycharm的IDE project下] 首先更新电脑的pip.exe[命令行下面] 然后进入IDE project ——>setting 中查找是否安装pygame 我的 ...

  9. 「日常训练」Girls and Boys(HDU-1068)

    题意 有n个同学,给出同学之间的爱慕关系,选出一个集合使得集合中的人没有爱慕关系.问能选出的最大集合是多少. 分析 二分图的最大独立集. 最大独立集的意思是,在图中选出最多的点,使他们两两之间没有边, ...

  10. 「题目代码」P1039~P1043(Java)

    P1039 谭浩强C语言(第三版)习题4.9 import java.util.*; import java.io.*; import java.math.BigInteger; public cla ...