unordered_set、unordered_multiset、unordered_map、unordered_multimap底层原理
时间: 2023-11-03 12:06:36 浏览: 160
unordered_set、unordered_multiset、unordered_map和unordered_multimap的底层原理是基于哈希表实现的。哈希表是一种数据结构,通过将关键字映射到哈希表中的一个位置来快速查找和插入元素。在哈希表中,每个元素被存储在一个桶中,桶的数量和大小根据哈希表的大小和负载因子动态调整。
当插入一个元素时,哈希表首先使用哈希函数计算关键字的哈希值,然后根据哈希值找到对应的桶。如果桶是空的,则直接插入元素;如果桶不为空,则通过开放定址法或链地址法解决冲突,将元素插入到合适的位置。插入操作的平均时间复杂度是常数级别的。
当查找一个元素时,哈希表通过哈希函数计算关键字的哈希值,然后根据哈希值找到对应的桶。如果桶中有元素,则通过比较关键字找到目标元素;如果桶中没有元素,则表示目标元素不存在。查找操作的平均时间复杂度是常数级别的。
删除一个元素的操作也类似于查找操作,先找到元素所在的桶,然后删除元素。删除操作的平均时间复杂度也是常数级别的。
相关问题
unordered_multiset,unordered_set,unordered_multimap,unordered_map,set,map,multiset,multimap的区别和特点 unordered_multiset,unordered_set,unordered_multimap,unordered_map,set,map,multiset,multimap的区别和特点
这些容器都是C++ STL(标准模板库)中的关联容器,用于存储和管理键值对数据。它们的区别和特点如下:
1. unordered_multiset和unordered_set:
- 无序容器,使用哈希表实现。
- unordered_multiset允许重复的元素,而unordered_set不允许。
- 插入、查找和删除的平均时间复杂度为常数时间(O(1))。
- 元素的顺序是无序的,不会根据插入顺序或键值排序。
2. unordered_multimap和unordered_map:
- 无序容器,使用哈希表实现。
- unordered_multimap允许键重复,而unordered_map不允许。
- 插入、查找和删除的平均时间复杂度为常数时间(O(1))。
- 元素的顺序是无序的,不会根据插入顺序或键值排序。
3. set和map:
- 有序容器,使用红黑树实现。
- set中存储唯一的键,map中存储键值对。
- 插入、查找和删除的平均时间复杂度为对数时间(O(log n))。
- 元素的顺序是按照键值排序的。
4. multiset和multimap:
- 有序容器,使用红黑树实现。
- 允许重复的键。
- 插入、查找和删除的平均时间复杂度为对数时间(O(log n))。
- 元素的顺序是按照键值排序的。
总结:unordered容器提供了更快的插入、查找和删除操作,但不保证元素顺序;而有序容器保证元素按照键值有序存储,但操作速度相对较慢。选择使用哪个容器取决于具体的需求。
set、map、unordered_set、unordered_map的使用
set、map、unordered_set和unordered_map是C++ STL中的容器,用于存储和操作数据。
set是一个有序的容器,其中的元素按照一定的规则进行排序。它不允许重复的元素,并且可以快速地插入、删除和查找元素。
map是一个有序的键值对容器,其中的元素按照键的大小进行排序。它也不允许重复的键,并且可以根据键快速地插入、删除和查找值。
unordered_set是一个无序的容器,其中的元素没有特定的顺序。它不允许重复的元素,并且可以快速地插入、删除和查找元素。由于其底层实现是哈希表,所以插入、删除和查找的时间复杂度是常数时间。
unordered_map是一个无序的键值对容器,其中的元素没有特定的顺序。它也不允许重复的键,并且可以根据键快速地插入、删除和查找值。由于其底层实现是哈希表,所以插入、删除和查找的时间复杂度是常数时间。
总结来说,set和map是有序容器,unordered_set和unordered_map是无序容器。它们的使用方式和操作方法略有不同,具体可以根据需求选择合适的容器来存储和操作数据。
#### 引用[.reference_title]
- *1* *3* [C++中的set、unordered_set、map、unordered_map详解以及如何选择](https://blog.csdn.net/weixin_52244492/article/details/124628733)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [unordered_set、unordered_map、unordered_multiset和unordered_multimap总结](https://blog.csdn.net/sinat_41619762/article/details/115268554)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文