C++ Primer 第五版 第十一章 关联容器

C++Primer 第五版 ——《第十一章 》关联容器 目录 Preface 使用关联容器 定义关联容器 以及关联容器支持的操作(376P) 初始化multimap 或 multiset ( 377P) 有序容器的关键字类型的限制 ( 378P) pair 标准库类型 ( 379P ) pair 类型提供的操作(380P) 使用 pair 类型作为函数的返回值类型 以及 使用 make_pair 来创建 pair对象(380P) ... 阅读详情

关联容器中的元素是按关键字来保存和访问的。

两个主要的关联容器类型是map和set。

一、使用关联容器
使用map

当从map中提取一个元素时,会得到一个pair类型的对象。pair是一个模板类型,保存两个名为first和second的(公有)数据成员。map所使用的pair用first成员保存关键字,用second成员保存对应的值。

使用set

举例:统计单词出现次数时,忽略常见单词

当需要保存特定的值集合——通常是满足/不满足某种要求的值集合,用set最为方便,比如黑名单。

二、关联容器概述

关联容器不支持顺序容器的位置相关的操作,例如push_front或push_back。关联容器也不支持构造函数或插入操作这些接受一个元素值和一个数量值的操作。关联容器的迭代器都是双向的。

1. 定义关联容器

每个关联容器都定义了一个默认构造函数,它创建一个指定类型的空容器。

我们也可以将关联容器初始化为另一个同类型容器的拷贝,或者是从一个值范围来初始化关联容器,只要这些值可以转化为容器所需类型就可以。

初始化multimap或multiset

multimap和multiset允许多个元素具有相同的关键字。

2. 关键字类型的要求
有序容器的关键字

有序容器要求关键字类型必须支持比较操作<。

可以提供自己定义的操作来代替关键字上的<运算符。比较函数的基本性质:

使用关键字类型的比较函数

用compareIsbn函数定义一个multiset。

3. pair类型

标准库类型pair定义在头文件utility中。

一个pair保存两个数据成员。当创建一个pair时,我们必须提供两个类型名,pair的数据成员将具有对应的类型。

与其他标准库类型不同,pair的数据成员是public的。两个成员分别命名为first和second。

创建pair对象的函数

三、关联容器操作

在一个map中,每个元素是一个pair对象,包含一个关键字和一个关联的值。由于我们不能改变一个元素的关键字,因此这些pair的关键字部分是const的。

1. 关联容器迭代器

set的迭代器是const的

与不能改变一个map元素的关键字一样,一个set中的关键字是const的。可以用一个set迭代器来读取元素的值,但不能修改。

遍历关联容器

map和set支持begin和end操作。我们可以用这些函数迭代器,然后用迭代器来遍历容器,

当使用一个迭代器遍历一个map、multimap、set或multiset时,迭代器按关键字升序遍历元素。

关联容器和算法

我们通常不对关联容器使用泛型算法。const这一特性意味着不能将关联容器传递给修改或重排容器元素的算法。关联容器可用于只读取元素的算法。

2. 添加元素

检测insert的返回值

insert(或emplace)返回的值依赖于容器类型和参数。对于不包含重复关键字的容器,添加单一元素的insert和emplace版本返回一个pair,告诉我们插入操作是否成功。pair的first成员是一个迭代器,指向具有给定关键字的元素;second成员是一个bool值,指出元素是插入成功还是已经存在于容器中。如果关键字已在容器中,则insert什么事也不做,且返回值中的vool部分为false。如果关键字不存在,元素被插入容器中,且bool值为bool。

向multiset或multimap添加元素

对允许重复关键字的容器,接受单个元素的insert操作返回一个指向新元素的迭代器。

3. 删除元素

4. map的下标操作

map和unordered_map容器提供了下标运算符和一个对应的at函数。set类型不支持下标。

当对一个map进行下标操作时,会获得一个mapped_type对象;但当解引用一个map迭代器时,会得到一个value_type对象。

map的下标运算符返回一个左值。由于返回的是一个左值,我们既可以读也可以写元素。

5. 访问元素

在multimap或multiset中查找元素

用lower_bound和upper_bound解决此问题:

调用equal_range解决此问题:

四、无序容器

无序容器使用哈希函数和关键字类型的==运算符来组织元素。

管理桶

无序容器在存储上组织为一组桶,每个桶保存零个或多个元素。无序容器使用一个哈希函数将元素映射到桶。无序容器的性能依赖于哈希函数的质量和桶的数量和大小,

如果一个桶中保存了很多元素,那么查找一个特定元素就需要大量比较操作。

无序容器提供了一组管理桶的操作。这些成员函数允许我们查询容器的状态以及在必要时强制容器进行重组。

无序容器对关键字类型的要求

C++Primer第五版 习题答案 第十一章关联容器 11.1 阅读详情

相关推荐

C++Primer第五版 第十一章习题答案(1~10)

1:知识点1:关联容器与顺序容器有着根本的不同 知识点2:关联容器的元素是按关键词来保存和访问的,顺序容器是按他们在容器中的位置来顺序访问 知识点3:关键词在关联容器中起到重要的作用,map中的元素是(关键字—值)对,关键词是索引左右,值是与索引相关联的数据。set每个元素只包含一个关键字,支持高效的关键词查找 知识点4:标准库提供8个关联容器,主要是map/set,是否重复关键字,顺序保存

MISAYAONE的博客 1万+

C++ Primer(第五版)|练习题答案与解析(第十一章:关联容器)

C++ Primer(第五版)|练习题答案与解析(第十一章:关联容器) 本博客主要记录C++ Primer(第五版)中的练习题答案与解析。 参考:C++ Primer C++ Primer 练习题11.1 描述map和vector的不同。 vector是顺序容器,只能存放单一类型的数据。 map是关联的容器,存放一对key-value,值表示与索引相关联的数据,这两个数据可以是不同类型。(P...

qq_24739717的博客 803

C++Primer第五版 第十一章习题答案(21~30)

21:知识点1:向map中添加元素,元素的类型必须是pair,但是并没有现成的pair元素,所以需要在insert()的参数列表中创建一个pair familyy.insert({"dsa","das"});//c++11支持 familyy.insert (pair("asd","das"));//显示创建一个pair familyy.insert(make_pair("de","1"));/

MISAYAONE的博客 6521

《C++Primer 第五版》——第十一章 关联容器

《C++Primer 第五版》——第十一章 关联容器10.1 概述函数 find 的算法如何工作迭代器令算法不依赖于容器,但算法依赖于元素类型的操作10.2 初识泛型算法10.2.1 只读算法算法和元素类型操作两个序列的算法10.2.2 写容器元素的算法算法不检查写操作,这是程序员的责任插入迭代器 back_inserter拷贝算法10.2.3 重排容器元素的算法消除重复单词使用unique使用容器操作删除元素10.3 定制操作 lambda10.3.1 向算法传递函数谓词排序算法10.3.2 lambda

KCDCY的博客 643

C++Primer第五版 第十一章习题答案(11~20)

11:知识点:当我们使用decltype作用于某个函数时,它返回函数类型而非指针类型,因此我们需要显示的加上*已表明我们需要返回指针。作用:选择并返回操作数的类型,若为函数,则类型为函数的返回类型 using compareType = bool (*)(const Sales_data& lhs, const Sales_data& rhs);//使用using来代替函数类型 12:

MISAYAONE的博客 9351

自动化革命:AI在需求分析、代码生成与测试中的深度应用

在2025年的科技浪潮中,人工智能(AI)已不再是实验室中的概念,而是深度渗透至软件开发的全生命周期。从需求分析的精准捕捉,到代码生成的自动化创作,再到测试环节的智能覆盖,AI正以革命性姿态重塑软件工程的核心环节。本文将结合2025年最新数据与行业实践,解析AI如何在这三大领域实现深度应用。

1512

《C++primer(第五版)》学习之路-第十一章:关联容器

【 声明:版权所有,转载请标明出处,请勿用于商业用途。  联系信箱:libin493073668@sina.com】 11.1 使用关联容器 1. 关联容器类型 按关键字有序保存元素 map                    关联数组,保存关键字-值对 set                      关键字即值,即只保存关键字的容器 multimap      

月下的寂寞肖邦 1938

HFSS仿真3dB微带双分支定向耦合器学习笔记

设计一个3dB微带双分支定向耦合器,各端口微带线特性阻抗为50Ω,中心频率为5GHz,介质基板的介电常数9.6,基板厚度为0.8mm这里重点讲解HFSS的操作,关于理论知识后面文章更新。

qq_36521926的博客 7775

C++ primer 第五版个人笔记 第十一章 关联容器

11.1 使用关联容器 关联容器map为空时,新创建一个元素的键对应的值默认初始化为0; 统计一个元素是否在set中有两种写法: myset.find(target)==myset.end(); //未找到 myset.count(target)==0; //未找到 对于有序容器(map,multimap,set,multiset),关键字类型必须...

Mint2yx4的博客 295

信息奥赛课课通(C++)p154-1近似排序

试题描述 读入一对正整数,将这两个数之间(包括这两个数本身)的所有数按下述特别规则排序后输出,该特别规则是按两数倒过来的值进行比较决定其大小,如30倒过来为3,29倒过来为92,则29大于30. 输入要求 1行,包含两个用空格隔开的自然数,这两个自然数给出了待排序数的范围,其中1≤第一个数≤第二个数≤999999999,两个数之差不超过100. 输出要求 输出排序后的数据,每行输出...

mengdicfm的博客 7287

【机器学习】一文搞懂算法模型之:Transformer

必会算法模型之:Transformer

商务合作 | 面试培训 | 职场规划 ==>主页扫码 5610

c++ primer 第五版学习笔记-第十一章 关联容器

本文为转载,出处:https://blog.youkuaiyun.com/libin1105/article/details/48749231 https://blog.youkuaiyun.com/xiaoshuaisdl/article/details/79743644 11.1 使用关联容器 关联容器支持高效的查找和访问,它和其他容器类型不同,是...

一只啃着鸡翅写代码的白猫的成长记录 355

高电压技术的面试内容整理(详细版本:57题)

涵盖了高电压技术的关键领域,包括气体放电的物理过程、液体和固体介质的绝缘特性、高压外绝缘的分类与特性、电气设备绝缘试验的方法与原理、电力系统的防雷保护措施,以及内部过电压的产生、影响与限制方法,为理解和应对高电压环境下的电气问题提供了系统的知识框架。通过深入探讨气体放电理论、介质极化与损耗、绝缘子的电气特性、绝缘试验技术、防雷策略以及内部过电压的管理。

weixin_44808274的博客 777

C++primer(第五版)第十一章(关联容器)

关联容器不支持顺序容器的位置相关的操作,例如push_front,push_back.因为关联容器的元素是根据关键字存储的,因此只能插入(insert).初始化map可以参考我上面的代码,但是map和set都不允许有重复的关键字,但是编译器不会报错.重复定义的关键字不会存入map或set中.multimap或是multiset和maph,set不同的是它们可以有重复的关键字,因此初始化的时候就可以有多个相同的关键字.

m0_63235356的博客 272

RK3588平台开发系列讲解(SARADC篇)SARADC的工作流程

📢本篇将介绍SARADC的源码分析和工作流程。

内核笔记 3233

Python教程:一文了解Python的深拷贝与浅拷贝

理解 Python 中的深拷贝(deep copy)和浅拷贝(shallow copy)是非常重要的,特别是在处理嵌套结构的数据时。让我们深入探讨这两个概念,并通过代码示例进行说明。

旦莫的博客 3969

C++Primer第五版 习题答案 第十一章 关联容器(Generic Algorithms)

11.1 map是关联容器,其元素是按关键字来保存和访问的;vector是顺序容器,其元素是按它们在容器中的位置来顺序保存和访问的。 11.2 list:适合插入较多的场景; vector:动态数组的场景; deque:需要头部和尾部增删的场景; map:字典的例子; set:添加忽略关键字的例子。 这里实在是想不出好例子 11.3 #include &amp;lt;map&amp;gt; #include &amp;l...

shamozhizhoutx的博客 4053

如何利用Dpabi,AFNI,FSL软件计算种子点的功能连接?

fsl_glm 得到的是线性回归系数(beta coefficient),由于在自变量和因变量标准化(均值为 0,标准差为 1)的情况下,简单线性回归的回归系数和皮尔逊相关系数是相同的,因此这是一种间接的方法。(3)上一步得到的 PCC.nii.gz 文件是 Harvard-Oxford 概率模板中的后扣带回,每个体素中的数值(1-100)表示该体素属于 PCC 的概率,反映 PCC 在不同被试中的变异大小,也表示我们对于某个体素属于PCC 的信心。接下来,我们来聊聊功能连接在数据处理里的具体应用。

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 7843

C++ Primer (第五版)-第十一章 关联容器

C++

jiyanghao19的博客 119

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C++primer第五版笔记-第十一章关联容器

1、适用关联容器 2、关联容器概述 3、关联容器操作 4、无序容器

liugallup的专栏 394

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C++Primer(第五版 )第十一章 关联容器 章节编程练习答案

11.1描述map和vector的不同。 答: map是关联容器,vector是顺序容器。 11.2分别给出最适合使用list、vector、deque、map以及set的例子。 答: list:双向链表,适合频繁插入删除元素的场景。 vector:适合频繁访问元素的场景。 deque:双端队列,适合频繁在头尾插入删除元素的场景。 map:字典。 set:适合有序不重复的元素的场景。 11.3编写你自己的单词计数程序。 答: ...

是鲤鱼啊 546

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

c++primer(第五版) 第十一章 关联容器习题答案

纯原创    转载请注明出处:http://blog.youkuaiyun.com/axuan_k 11.1    11.2     11.4 #include #include #include using namespace std; int main(){ // 11.1 // vector是一个顺序容器,该容器每个对象通过下标访问 // map是一个关联容器,

旧时光 2144

c++ primer(第五版)笔记 第十一章 关联容器

// 关联容器(associative container) // 两类容器: // map key-value // set key // 八种关联容器: // 3种分类方式 // 1.或者是一个 set, 或者是一个 map // 2.或者要求关键字不重复,或者允许关键字重复 // 3.或者按顺序保存元素,或者无序保存 // m

cook A code 513

c++ primer(第五版)学习笔记及习题答案代码版(第十一章)关联容器

笔记较为零散,都是自己不熟悉的知识点。 习题答案至于一个.cc 中,包含Chapter7.h头文件,读入文件包括./test ./rules .需要演示某一题直接修改 #define NUM****, 如运行11.23题为#define NUM1123; chapter 11 1.  关联容器不支持顺序容器的位置相关的操作,例如push_front或push_back。原因是关联容器

refuil的博客 4413

C++ 顺序容器

C++ Primer中文版(第五版),第九章“顺序容器”为第三章的拓展,详细讲授了顺序容器,第十一章“关联容器”,也是C++容器相关的内容。

Hero_Monkey的博客 274

C++ Primer 中文第 5 版练习答案 第 11 章 关联容器

1 map 是关联型容器,vector 是顺序性容器。 map 中的元素是键值对,并且自动按照键排序 2 list:不确定数据量大小,需要频繁插入删除,很少查找 vector:不需要频繁在中间插入删除,需要频繁随机访问 deque:只在头尾插入删除,需要频繁随机访问 map:需要存放两个集合之间的映射关系 set:需要存放不重复的元素,且要能快速查找是否已存在 3 #include <iostream> #include <string> #include <unordered

Gorgeoustray 305
上一篇: C++ Primer 第五版 第十章 泛型算法
下一篇: CUDA C 编程权威指南 第一章 基于CUDA的异构并行计算
青禾子的夏
博客等级 码龄8年 405粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值