1.基础知识
哈希表的基础理论见:代码随想录-哈希表基础理论
哈希表(英文名为Hash table),数组就是一个简单的哈希表。
哈希函数,通过hashCode,利用特定的编码方式,将其他数据格式转化为不同的数值。
哈希碰撞,拉链法和线性探测法。
常见的三种哈希结构,主要有:
- 数组
- set(集合)
- map(映射)
集合 | 底层实现 | 是否有序 | 数值是否可以重复 | 能否更改数值 | 查询效率 | 增删效率 |
---|---|---|---|---|---|---|
std::set | 红黑树 | 有序 | 否 | 否 | O(log n) | O(log n) |
std::multiset | 红黑树 | 有序 | 是 | 否 | O(logn) | O(logn) |
std::unordered_set | 哈希表 | 无序 | 否 | 否 | O(1) | O(1) |
映射 | 底层实现 | 是否有序 | 数值是否可以重复 | 能否更改数值 | 查询效率 | 增删效率 |
---|---|---|---|---|---|---|
std::map | 红黑树 | key有序 | key不可重复 | key不可修改 | O(logn) | O(logn) |
std::multimap | 红黑树 | key有序 | key可重复 | key不可修改 | O(log n) | O(log n) |
std::unordered_map | 哈希表 | key无序 | key不可重复 | key不可修改 | O(1) | O(1) |
常见的map的基础知识见:C++之STL整理(3)之map 用法(创建、赋值、方法)整理_c++ map初始化-CSDN博客
c++ map基础知识、按键排序、按值排序 - 简书 (jianshu.com)
C++ 迭代器(iterator)超详解+实例演练_c++ iterator-CSDN博客