- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑这个代码。我为 unordered_map 保留 6 个点并插入 6 个元素。之后,有7个桶。为什么是这样? max_load_factor 为 1,并且有足够的存储桶用于我插入的元素数量。
#include <iostream>
#include <unordered_map>
using namespace std;
int main () {
unordered_map<std::string,std::string> mymap = {
{"house","maison"},
{"apple","pomme"},
{"tree","arbre"},
{"book","livre"},
{"door","porte"},
{"grapefruit","pamplemousse"}
};
unordered_map<std::string,std::string> mymap2; // THIS ONE!!!
mymap2.reserve(6);
for (auto i:mymap) {
mymap2[i.first] = i.second;
}
std::cout << "max_load factor " << mymap2.max_load_factor() << " mymap has " << mymap2.bucket_count() << " buckets.\n";
for (unsigned i=0; i<mymap2.bucket_count(); ++i) {
cout << "bucket #" << i << " contains: ";
for (auto it = mymap2.begin(i); it!=mymap2.end(i); ++it)
cout << "[" << it->first << ":" << it->second << "] ";
cout << endl;
}
return 0;
}
输出:
max_load factor 1 mymap has 7 buckets.
bucket #0 contains:
bucket #1 contains: [book:livre]
bucket #2 contains: [tree:arbre]
bucket #3 contains: [house:maison] [grapefruit:pamplemousse]
bucket #4 contains:
bucket #5 contains: [door:porte]
bucket #6 contains: [apple:pomme]
最佳答案
cplusplus.com website给出了这个解释:
void reserve (size_type n);
Request a capacity change
Sets the number of buckets in the container (
bucket_count
) to the most appropriate to contain at least n elements.If n is greater than the current
bucket_count
multiplied by themax_load_factor
, the container'sbucket_count
is increased and a rehash is forced.If n is lower than that, the function may have no effect.
unordered_map
时变量,它有一个
bucket_count
的
1
和一个
max_load_factor
的
1
.
reserve
6
大于
max_load_factor
的桶乘以
bucket_count
根据这个定义,在我看来,这种行为是正确的。
17
添加在您的代码中添加以下行以显示
bucket_count
之前
reserve
事实上,它是
1
std::cout << "BEFORE RESERVE max_load factor " << mymap2.max_load_factor() << " mymap has " << mymap2.bucket_count() << " buckets.\n";
显示如下:
BEFORE RESERVE max_load factor 1 mymap has 1 buckets.
预留后:
AFTER RESERVE max_load factor 1 mymap has 7 buckets.
因此,在我看来,这种行为是正常的。
关于c++ - 为什么 unordered_map 由于 "reserve"有足够的桶时会增加大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65950046/
对于我的问题,我找不到更好的措辞。 在我的应用程序中的某个时刻,我设置了一些非常密集的动画。问题是,在高端设备上,动画运行流畅且赏心悦目。另一方面,我测试过的一台低端设备在制作动画时表现非常糟糕。 试
我正在修补 OTP 模块 ( yubico_pam ),并尝试访问管理员选择的控制标志(例如必需,足够, ETC)。 有什么想法吗?这是否可行(无需解析文件)? 最佳答案 无法在 API 中查询此信息
我有一些为 Linux 编写的 C 代码,依赖于套接字和 arpa/inet.h 以及 libusb.h,我想在 MinGW 下为 Windows 编译它。 (请注意,当前项目只有一个非常简单的 Ma
我是一名优秀的程序员,十分优秀!