#整理自代码随想录#
建立哈希表可以帮我们解决很多问题,一些题目用暴力法可以解决,但重复遍历会浪费时间当我们要判断一个元素是否在之前就出现过,就可以使用哈希法
哈希结构包括以下三种
1、数组
2、集合(set)
集合 | 底层实现 | 是否有序 | 数值是否可以重复 | 数值能否更改 | 查询效率 | 增删效率 |
std:;set | 红黑树 | 有序 | 否 | 否 | O(logn) | 0(logn) |
std::multiset | 红黑树 | 有序 | 是 | 否 | O(logn) | O(logn) |
std::unordered | 哈希表 | 无序 | 否 | 否 | O(1) | O(1) |
当我们要使用集合来解决哈希问题时,优先使用unordered
3、映射(map)
映射 | 底层实现 | 是否有序 | 数值能否重复 | 数值(key)能否更改 | 查询效率 | 增删效率 |
std::map | 红黑树 | key有序 | key不可重复 | key不可修改 | O(logn) | O(logn) |
std::multiamp | 红黑树 | key有序 | key可重复 | key不可修改 | O(logn) | O(logn) |
std::unordered | 哈希表 | key无序 | key不可重复 | key不可修改 | O(1) | O(1) |
unordered_map和map是不能重复的,也就是说它会自动帮我们删除重复元素.