算一算挤不挤

补全 load:返回负载因子(已装条数 ÷ 总格子数)。补全后输出 8 格表装 4 条时的负载因子。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

挤到一定程度就换大房子

补全 maybe_grow:负载因子超过 0.75 就把容量扩成两倍,返回新容量;没超过就原样返回。4 格的表装了 4 条,补全后输出新的容量。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

换了房子要重新算位置

rehash 不是把内容原样搬过去——格子数变了,每个键算出来的槽位也跟着变。补全 rehash:把 4 格表里的学号重新放进一张 8 格表。补全后输出 15 号在新表里坐第几格。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

搬完之后一个都不能少

同一个 rehash。搬家最容易出的错是漏人。补全后输出新表里非空的格子有几个,和搬之前对上。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

bucket_count() 返回什么

第 1 步:4 格装了 3 个:挤到 0.75 第 2 步:再装就太挤:要扩容 第 3 步:24 按 8 格重新算:第 0 格 第 4 步:17 按 8 格重新算:第 1 格 第 5 步:15 按 8 格重新算:第 7 格 24 17 15

开始练习 →

reserve(n) 的作用

提前调用 m.reserve(n) 的好处是【0】。

开始练习 →

结构体当键要提供什么

自己定义的结构体要当 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 编译。)

开始练习 →