哈希表的常用数据结构——map映射,映射就是将一个元素(key)和一个对应值(value)关联起来。
同样的,map映射也提供map、multimap、unordered_map三种结构。
| 映射 | 底层实现 | 是否有序 | 数值是否可以重复 |
|---|---|---|---|
| std::map | 红黑树 | key有序 | key不可重复 |
| std::multimap | 红黑树 | key有序 | key可重复 |
| std::unordered_map | 哈希表 | key无序 | key不可重复 |
unordered_map查找速度更快,使用场景:不需要排序只需要快速查找键对应的值
map、multimap的key值存储是有序的,使用场景:需要对键值对进行自定义排序
1.引入头文件
// 引入unordered_map头文件,包含unordered_map类型
#include <unordered_map>
// 引入map头文件,包含map类型和multimap类型
#include <map>
2.map的声明
// 声明一个整数类型映射到整数类型的 无序映射
unordered_map<int, int> uMap;
// 声明一个将字符串映射到整数的`map`,可以这样声明:
map<string, int> myMap;
3.插入键值对:insert()或者[ ]操作符
uMap[10] = 0;
myMap["english"] = 80;
4.查找值:find()
if (myMap.find("math") != myMap.end()) {
// 键存在
} else {
// 键不存在
}
5.遍历键值对:for循环
for(const pair<int,int>& kv:umap) {
}
const用于声明一个不可修改的变量,在这里表示只能读取容器中的值,但不能修改。
pair<int, int>定义了kv也就是键值对的数据类型是pair。在使用时通过first 和 second 成员来访问 pair 中的第一个和第二个元素, 它的 first 成员存储键,而 second 成员存储值。
&:表示kv是一个引用,而不是值的拷贝。
6.范围for循环:遍历容器中的元素
for (类型 变量名 : 容器) {
// 在这里使用一个变量名,表示容器中的每个元素
}
范围for循环不会修改容器中的元素,它只用于读取元素。
使用auto关键字来让编译器自动推断元素的类型:
// 使用auto关键字自动推断元素的类型
for (auto num : numbers) {
std::cout << num << " ";
}
417

被折叠的 条评论
为什么被折叠?



