结构体当键要提供什么
自己定义的结构体要当 unordered_map 的键,需要提供【0】。
reserve 之后桶够不够
运行下面这段程序: #include <iostream> #include <string> #include <utility> #include <vector> using names
默认的最大负载因子
运行下面这段程序: #include <iostream> #include <string> #include <utility> #include <vector> using names
亲眼看到一次 rehash
补全:往 unordered_map 里依次插入 1 到 1000,每插一个就看看 bucket_count() 有没有变。变过就输出 看到了,一次都没变就输出 没看到。 (本题用 g++ -std=c++17 -O0 编译。)
reserve 以后一次都不搬家
补全:插入 1000 个元素之前先 reserve 够,然后统计插入过程中 bucket_count() 变了几次。一次都没变输出 一次都没有,否则输出 还是搬了。 (本题用 g++ -std=c++17 -O0 编译。)
补全:结构体键的相等比较
补全 PointEq:两个点的 x、y 都相等才算同一个点。然后数一数 5 个点里有几个不同的点。 (本题用 g++ -std=c++17 -O0 编译。)
坏哈希会挤成一桶
下面的 BadHash 对任何键都返回 0。补全:插入 100 个不同的键之后,找出最大的那个桶里有几个元素(用 bucket_size(i))。 (本题用 g++ -std=c++17 -O0 编译。)
手动 rehash 把桶开大
补全:插完 1000 个元素之后,调用 rehash 把桶数开到至少 4096,再检查桶数和元素个数。输出「桶够不够/元素个数」,格式如 桶够了/1000。 (本题用 g++ -std=c++17 -O0 编译。)
够用的哈希表至少要有什么
第 1 步:第 7 格已经有 15 第 2 步:23 % 8 也等于 7:撞上了 第 3 步:第 7 格挂一串,两个都装下 第 4 步:查 23:先到第 7 格,再比 15 第 5 步:不是它,往后比:找到 23 24 17 13 15 1
为什么说哈希表平均是 O(1)
哈希表的复杂度要加「平均」两个字,是因为【0】。