1.关联容器的类型:map(键-值对的集合,可理解为关联数组), set(单纯的键的集合), multimap(一个键对应多个值,键唯一), multiset(相同键可以是多个)。

2.pair类型提供的操作:

    a. pair(T1, T2) p1; 创建一个空的pair对象,它的两个元素分别是T1和T2类型,采用值初始化。

    b. pair(T1, T2) p2;创建一个pair对象,它的两个元素分别是T1和T2类型,其中first初始化为v1,second初始化为v2

    c. make_pair(v1,v2);  以v2和v1创建一个新的pair对象

    d. p1 < p2两个pair对象之间的小于运算,先比较第一个再比较第二个

    e. p1 == p2如果两个pair对象first和second成员相等,则这两个对象相等。该运算使用元素的 ==操作符

    f . pq.first :返回p中名为first的公有数据成员,p.second :返回p的名为second的共有数据成员

3. ,map对象的定义:

    a. map<k, v> m创建一个名为m的空map对象,其键和值的类型分别为k和

    b. map<k, v> m(m2)创建m2的副本,m与m2必须有相同的键值类型

    c. map<k, v> m(b,e)创建map类型的对象m,存储迭代器b和e标记的范围内所有元素的副本。元素类型必须能转换为pair<const k, v>

4. map定义的类型

    a. map<k,v> :: key_type 在 map容器中,做索引键的类型

    b. map<k,v> :: mapped_type 在map容器中,键所关联的值的类型

    c. map<k,v> :: value_type 一个pair类型,它的first元素具有const map<k,v>::key_type类型,而second元素则为 map<k,v>::mapped_type类型   

5.给map类型添加元素

    a. 使用下标访问map对象:

      1 map <string , int>  word_count;//empty map
       //insert default initialzed element with key Anna;them assign 1 to its value
       word_count["Anna"] = 1;

     以上代码将发生以下事情:

        (1)在word_count中查找键为 Anna的元素,没有找到

        (2)将一个新的键值插入到word_count中,他的键是const string类型的对象,保存Anna。而它的值则采用值初始化,这就意味着在本例中值为 0.

        (3)将这个新的键值对插入到word_count中。

        (4)读取新插入的元素,并将它赋值为1。

    b. map::insert的使用

        (1) m.insert(e); e是一个在m上的alue_type类型的值。如果键(e.first)不再m中,则插入一个值为e.second的新元素;如果该键在m中则m保持不变,该函数返回一个

           pair类型对象,包含只想键e.fitst的元素的map迭代器,以及一个bool类型,表示是否插入了该元素.

        (2) m.insert(beg,end) beg和end是标记元素范围的迭代器,其中的元素必须为m.value_type类型的键值对,对于该范围内所有三元素

        (3) m.insert(iter,e) e是一个用在m上的value_type类型的值,如果键不在m中,则创建新元素,并以迭代器iter为起点搜索新元素存储的位置。返回一个迭代器,指           向m中具有给定键的元素

6.查找并读取map中元素

    a. m.count(k): 返回m中k的出现次数,map中只可能是0或者1

    b. find(k)       : 如果存在则返回迭代器,如果不存在返回超出末端迭代器

7.从map对象中删除元素

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

    b. merase(p)   :从m中删除迭代器p所指向的元素。p必须指向m中确实存在的元素,而且不能等于m.end。返回oid类型

    c. m.erase(b,e):删除b和e标记的一段元素,返回void

8.set、multimap、multiset添加、删除和查找操作:

    a. 添加:insert(k) set:重复的只会插入一次,而multimap、multiset会添加多次

    b. 删除:erase(k) set:删除k元素,multimap、multiset可能会删除多个k匹配的元素

    c. 查找:find(),cout()分别返回元素的位置和元素的个数

    d. multimap和multiset特有的

        (1) m.lower_bound(k)返回一个迭代器,指向键不小与k的第一个元素

        (2) m.upper_bound(k)返回一个迭代器,指向键大于k的第一个元素

        (3) m.equal_range(k)返回一个pair类型,pair的first成员等价与lower_bound(k),而second成员则等价于upper_bound(k)成员

C++ Primer 随笔 Chapter 10 关联容器的更多相关文章

  1. C++ Primer 随笔 Chapter 9 顺序容器

     参考:http://www.cnblogs.com/kurtwang/archive/2010/08/19/1802912.html 1..顺序容器:vector(快速随机访问):list(快速插入 ...

  2. c++ primer 10 关联容器

    关联容器和顺序容器的本质差别在于:关联容器通过键(key)存储和读取元素,顺序容器则通过元素在容器中的位置顺序存储和访问元素 关联容器类型 map 关联数组:元素通过键来存储和读取 set 大小可变的 ...

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

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

  4. C++ Primer笔记7_STL之关联容器

    关联容器 与顺序容器不同,关联容器的元素是按keyword来訪问和保存的.而顺序容器中的元素是按他们在容器中的位置来顺序保存的. 关联容器最常见的是map.set.multimap.multiset ...

  5. [C++ Primer] : 第11章: 关联容器

    目录 使用关联容器 关联容器概述 关联容器操作 无序容器 使用关联容器 关联容器与顺序容器有着根本的不同: 关联容器中的元素是按关键字来保存和访问的, 按顺序容器中的元素是按它们在容器中的位置来顺序保 ...

  6. C++ Primer : 第十一章 : 关联容器之关联容器的迭代器和操作

    关联容器的操作 除了和顺序容器定义的类型之外,关联容器还定义了一下几种类型: 关联容器额外的类型别名  key_type    此容器类型的关键字类型 mapped_type  每个关键字关联的类型, ...

  7. 【足迹C++primer】38、关联容器操作(2)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/cutter_point/article/details/35244805 关联容器操作(2) map ...

  8. C++ Primer 随笔 Chapter 4 数组和指针

    1.数组:数组是由类型名.标识符和维数组成的符合数据类型,类型名规定了存放在数组中的元素类型,维数规定数组中包含元素的个数而标识符就是数组的名称.例如: int  arr[10]; 其中 int 是类 ...

  9. C++ Primer 随笔 Chapter 2 变量和基本类型

    2.1C++内置类型 C++ 算术类型 类型 含义 最小存储空间(随机器不同而不同) bool 布尔型 --- char 字符型 8位 wchar_t 宽字符型 16位 short 短整型 16位 i ...

随机推荐

  1. Python之路【第五篇】:面向对象和相关

    Python之路[第五篇]:面向对象及相关   面向对象基础 基础内容介绍详见一下两篇博文: 面向对象初级篇 面向对象进阶篇 其他相关 一.isinstance(obj, cls) 检查是否obj是否 ...

  2. poj 3565 ants

    /* poj 3565 递归分治 还有用KM的做法 这里写的分治 按紫书上的方法 不过那里说的有点冗杂了 可以简化一下 首先为啥可以分治 也就是分成子问题解决 只要有一个集合 黑白的个数相等 就一定能 ...

  3. oracle中创建表时添加注释

    CREATE TABLE t1(id varchar2(32) primary key,name VARCHAR2(32) ,age VARCHAR2(32) );comment on column ...

  4. 安装zookeeper时候,可以查看进程启动,但是状态显示报错:Error contacting service. It is probably not running

    安装zookeeper-3.3.2的时候,启动正常没报错,但zkServer.sh status查看状态的时候却出现错误,如下: JMX enabled by defaultUsing config: ...

  5. ASP.NET中如何生成图形验证码

    通常生成一个图形验证码主要 有3个步骤: (1)随机产生一个长度为N的随机字符串,N的值可由开发可由开发人员自行设置.该字符串可以包含数字.字母等. (2)将随机生成的字符串创建成图片,并显示. (3 ...

  6. Svg图片在asp网站上的使用

    最近需要做一个动态的根据后台的返回数据而动态显示的导航图,然后我就采用了jquery+ajax+SVG矢量图来实现这个功能. 首先,客户给了个ai的矢量图,我对这一块不懂就找以前同事帮我转成了svg图 ...

  7. 基于JAVA网络编程的聊天小程序

    package com.neusoft.edu.socket; import java.io.BufferedReader; import java.io.IOException; import ja ...

  8. 织梦dede编辑器ckeditor如何添加中文字体不乱码

    dedecms内容编辑器ckeditor没有中文字体,找了很多教程都是千篇一律,而且都是错的,终于找到了一篇,结合自己的实际操作,来教您如何添加中文字体,并且解决乱码问题.   工具/原料 dedec ...

  9. producer怎样发送消息到指定的partitions

    http://www.aboutyun.com/thread-9906-1-1.html http://my.oschina.net/u/591402/blog/152837 https://gith ...

  10. RecyclerView实例-实现可下拉刷新上拉加载更多并可切换线性流和瀑布流模式(1)

    摘要 最近项目有个列表页需要实现线性列表和瀑布流展示的切换,首先我想到的就是上 [RecyclerView],他本身已经很好的提供了三种布局方式,只是简单做个切换应该是很简单的事情,如果要用Recyc ...