关于 map、unordered_map 和 multimap,它们都是 C++ STL 中的关联容器(Associative Container),可以用于存储键-值对数据。
实现方式
- map
map 是 C++ STL(Standard Template Library)中的一个关联容器(Associative Container)。它使用红黑树(Red-Black Tree)实现,内部元素是按照键值排序的,能够进行快速查找、插入和删除操作。每个元素都包含了两个值,即键和值,并且每个键只能映射到一个唯一的值上。
- unordered_map
unordered_map 也是 C++ STL 中的关联容器,使用哈希表(Hash Table)实现,内部元素是无序的,但是能够进行快速查找、插入和删除操作。每个元素都包含了两个值,即键和值,并且每个键只能映射到一个唯一的值上。
- multimap
multimap 也是 C++ STL 中的关联容器,使用红黑树实现,能够进行快速查找、插入和删除操作。但是不同于 map 和 unordered_map,每个键可以映射到多个值上,这意味着可以存储重复的键值对。每个元素都包含了两个值,即键和值。
应用方法
- map
使用 map 存储键值对时,先添加头文件 #include
std::map m; // 定义一个 map,键为 string,值为 int
常用的 map 库函数有:
- insert():插入一个键值对
- erase():删除指定键值对
- find():查找指定键的元素
- count():返回指定键的元素个数
以下是 map 的代码示例:
#include
#include
- unordered_map
使用 unordered_map 存储键值对时,先添加头文件 #include
std::unordered_map um; // 定义一个 unordered_map,键为 string,值为 int
常用的 unordered_map 库函数有:
- insert():插入一个键值对
- erase():删除指定键值对
- find():查找指定键的元素
- count():返回指定键的元素个数
以下是 unordered_map 的代码示例:
#include
#include
int main() {
std::unordered_map um; // 定义一个 unordered_map,键为 string,值为 int
um["apple"] = 10;
um["banana"] = 20;
um["orange"] = 30;
// 访问元素
std::cout << um["apple"] << std::endl; // 输出:10
// 遍历元素
for (auto& pair : um) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
return 0;
}
- multimap
使用 multimap 存储键值对时,先添加头文件 #include
std::multimap mm; // 定义一个 multimap,键为 string,值为 int
常用的 multimap 库函数有:
- insert():插入一个键值对
- erase():删除指定键值对
- find():查找指定键的元素
- equal_range():返回指定键的所有元素范围
- lower_bound():返回第一个大于等于指定键的元素的迭代器
- upper_bound():返回第一个大于指定键的元素的迭代器
以下是 multimap 的代码示例:
#include
#include
区别和联系
- 区别:
- map 和 multimap 内部元素是按照键值排序的,而 unordered_map 内部元素是无序的。
- map 内部使用红黑树实现,multimap 也使用红黑树实现,而 unordered_map 使用哈希表实现。
- map 和 unordered_map 中每个键只能映射到一个唯一的值上,而 multimap 中每个键可以映射到多个值上。
- 联系:
- map、unordered_map 和 multimap 都是 C++ STL 中的关联容器,用于存储键-值对数据。
- 它们都提供了插入、删除、查找等常用操作,且都能够快速完成这些操作。
- 库函数中,map 和 unordered_map