哈希表容器
容器特性:
unordered_map是无序对组的集合,常常借助“对组”和map的两个查找成员函数(find、count)两大特性,快速像数组一样随机访问一些元素以及判断元素在不在容器里、在哪个位置。
C++关于哈希表有很多数据结构,平时使用的比较多的有unordered_set 跟 unordered_map。
容器基本操作:
//遍历 for (auto i = hash.begin(); i != hash.end(); i++) 如果是unordered_map,遍历的时候,可以访键值i ->first或者是i->second; //查找 查找某个元素是否在哈希表中,可以使用hash.find(x) != hash.end(),或者hash.count(x) > 0 注意:hash.count(x) 的数值只有 0 和 1。所以不能通过hash.count(x)来表示x在hash 中出现的次数。 //插入 在unordered_set 中插入元素,可以用hash.insert(key)。 在unordered_map中插入元素,可以使用hash[key] = value。 //删除 在unordered_set 跟unordered_map 中删除元素,都用hash.erase(key)。 //清空:在个别场景下,可能需要一次性删除 unordered_map 容器中存储的所有键值对: hash.clear(); ———————————————— //原文链接:https://blog.csdn.net/m0_52318340/article/details/126050490
leetcode算法实践-unordered_map
219. 存在重复元素 II
c只能靠拢类似方法来满足时间复杂度要求:
560. 和为 K 的子数组
525. 连续数组
这道题和上一题是前缀和的经典应用,两道题相似度也很高
49. 字母异位词分组
1. 两数之和
454. 四数相加 II
347. 前 K 个高频元素
leetcode算法实践-unordered_set
unordered_set特性
- 无序set的键值和其内容值是一样的,和map不同的,我们不能修改其内容,但是可以插入元素或者删除元素,平均复杂度为常数时间。
- 它使用哈希表实现,元素的值同时是其键,是唯一标识,键和映射值的类型相同
和unordered_map相比,在算法容器选择时的核心区别?还有伪hash
- 目前感觉unordered_set常常只用 判断元素在不在容器里和去重特性。涉及对组数据才用unordered_map。
借一道leetcode思考总结map/set的应用及区别-CSDN博客
常用的函数:
find()
查找元素insert()
插入元素erase()
删除元素clear()
清空容器empty()
判断容器是否为空size()
返回容器的大小