C++高性能并行编程与优化 - 课件 - 17 由浅入深学习 map 容器
8.76 MB
90 页
0 评论
语言 | 格式 | 评分 |
---|---|---|
中文(简体) | .pptx | 3 |
摘要 | ||
文档主要介绍了C++中map容器的使用方法,包括读取、写入、判断、删除等操作。重点讲解了map提供的两个查找接口at()和[]的区别,以及在遍历时如何安全删除元素。同时介绍了emplace_hint、emplace和try_emplace的区别,并展示了C++17 range-based loop配合structural-binding语法糖的使用。 | ||
AI总结 | ||
以下是对文档内容的中文总结:
---
### 总结
#### 课程安排概述
课程共分为10个部分,本期为第4部分,重点介绍 `map` 容器的用法及优化,内容涵盖从基础到进阶的知识点。
#### 小彭老师的四定律
1. **读取**:使用 `at()`,若键不存在会抛出异常。
2. **写入**:使用 `[]`,若键不存在则创建默认值。
3. **判断键是否存在**:使用 `count()`,返回1或0。
4. **删除**:使用 `erase()`,若键不存在则无操作。
#### `map` 常用函数行为分析
| **操作类型** | **C++ 代码** | **键存在** | **键不存在** |
|--------------|--------------|------------|--------------|
| 读取 | `val = m.at(key)` | 读取值 | 抛出异常 |
| 写入 | `m[key] = val` | 覆盖旧值 | 创建并赋值 |
| 判断 | `m.count(key)` | 返回1 | 返回0 |
| 删除 | `m.erase(key)` | 删除键 | 无操作 |
#### `map` 遍历方法
- **传统遍历**:通过迭代器访问键值对的 `first` 和 `second` 成员。
```cpp
for (auto tmp : m) {
print(tmp.first, tmp.second);
}
```
- **C++17 range-based loop 配合 structural-binding**:
```cpp
for (auto [k, v] : m) {
print(k, v);
}
```
#### 其他补充知识
1. **结构化绑定**:C++17 引入的语法糖,简化遍历代码。
2. **其他容器**:包括 `set`、`multiset`、`unordered_set` 等的基本概念。
3. **查找效率**:`vector` 查找效率低(线性时间复杂度),而 `map` 和 `set` 使用二叉排序树实现。
---
以上内容涵盖了 `map` 容器的核心用法及相关扩展知识,逻辑清晰,重点突出,语言简洁明了。 |
P1
P2
P3
P4
P5
P6
P7
下载文档到本地,方便使用
- 可预览页数已用完,剩余
83 页请下载阅读 -
文档评分