搜索

ppt文档 C++高性能并行编程与优化 - 课件 - 17 由浅入深学习 map 容器

8.76 MB 90 页 6 下载 110 浏览 0 评论 0 收藏
所属分类: 后端开发 / C++
语言 格式 评分
中文(简体)
.pptx
3
摘要
文档详细介绍了C++中map容器的基本操作,包括读取、写入、判断和删除元素的不同方法,并比较了at和[]的使用场景。同时,文档讨论了遍历map容器时的安全性问题,指出直接修改遍历时的元素是无效的。此外,文档还回顾了set容器的分类及其与map容器的相似之处,如底层实现均为二叉排序树。
AI总结
### 文档总结 #### **课程概述** 本课程为《C++高性能并行编程与优化》系列课件的第4期,主题是**由浅入深学习 map 容器**。课程内容围绕 map 容器的使用、底层实现、常见操作及优化技巧展开。 --- #### **map容器的核心知识点** 1. **map的元素类型** - map的元素类型是`pair`,其中键`K`是`const`类型,确保键值对的键不会被修改。 - 值`V`可以自由修改,因为它不影响键的排序。 2. **map与set的对比** - set和map的底层实现均为二叉排序树。 - set只存储键,而map存储键值对。 - set的迭代器是`const_iterator`,而map的迭代器允许修改值部分。 3. **map的常用操作** - **读取**: - `at(key)`:返回键对应的值,若键不存在,抛出`out_of_range`异常。 - `operator[](key)`:若键不存在,会创建并零初始化一个键值对。 - **写入**: - `m[key] = val`:若键存在,覆盖旧值;若不存在,创建并写入新值。 - `m.at(key) = val`:若键不存在,抛出异常。 - **判断存在**:使用`m.count(key)`,返回`1`表示存在,`0`表示不存在。 - **删除**:使用`m.erase(key)`,若键不存在则无操作。 4. **遍历与修改** - 遍历map时,若直接修改`v`,只会修改遍历时生成的拷贝,不会修改原map中的值。 - 若要修改值,需通过引用或指针操作。 --- #### **emplace, emplace_hint, try_emplace的区别** - **emplace**:在指定位置插入元素,返回迭代器。 - **emplace_hint**:提供一个插入位置的建议,可能提高插入效率。 - **try_emplace**:尝试在指定位置插入元素,若键已存在,不执行插入。 --- #### **map的高效查找** - map的查找效率高,底层基于二叉树结构,支持对数时间复杂度的查找。 - vector的查找效率低,采用线性查找,时间复杂度为O(n)。 --- #### **课程重点** - **小彭老师四定律**: 1. 读取,用`at`。 2. 写入,用`[]`。 3. 判断存在,用`count`。 4. 删除,用`erase`。 - **安全提示**: - 遍历map时删除元素是不安全的,可能导致未定义行为。 - 使用`emplace`系列函数时需注意键的唯一性和插入位置。 --- #### **学习建议** - 熟悉map的常用操作和底层实现,掌握高效查找和修改技巧。 - 结合实际案例理解map的使用场景和优化方法。
P1
P2
P3
P4
P5
P6
P7
下载文档到本地,方便使用
- 可预览页数已用完,剩余 83 页请下载阅读 -
文档评分
请文明评论,理性发言.