C++11 无序设置-非常小的最大桶数

C++11 无序设置-非常小的最大桶数,c++11,unordered-set,C++11,Unordered Set,更新:我在使用Visual Studio 2013的Windows上看到此“问题”。在Linux上使用Clang3.3和llvm标准库的最新版本时,我看不到同样的代码。尽管如此,我还没有准备好把它当作微软的bug 我注意到一个奇怪的问题,我正在处理一个无序的集合。我的负载系数为1,最大大小为数百万,但下面显示的最大桶数仅为8。我试过用不同的类型 有人能解释一下吗 这应该是系统或库实现限制,而不是依赖于初始化或配置的数字。我看过下面的代码示例,其中max_bucket_count与max_coun

更新:我在使用Visual Studio 2013的Windows上看到此“问题”。在Linux上使用Clang3.3和llvm标准库的最新版本时,我看不到同样的代码。尽管如此,我还没有准备好把它当作微软的bug

我注意到一个奇怪的问题,我正在处理一个无序的集合。我的负载系数为1,最大大小为数百万,但下面显示的最大桶数仅为8。我试过用不同的类型

有人能解释一下吗

这应该是系统或库实现限制,而不是依赖于初始化或配置的数字。我看过下面的代码示例,其中max_bucket_count与max_count相同(即,百万)

std::无序集测试集;
标准::cout

bucket\u size(bucket index)
是具有该索引的bucket中的元素数。它应该很小

bucket\u count()
是存储桶的数量。它应该大约是
size()

这是在我的计算机上发生的情况(插入1000000个随机整数后):

20000000个随机整数之后:

size = 999891
bucket_count = 1056323
maximum bucket_size = 9
max_size = 1152921504606846975
max_bucket_count = 1152921504606846975
max_load_factor = 1
size = 19953913
bucket_count = 36473443
maximum bucket_size = 9

可以看出,桶数实际上大于大小,但桶仍然很小。

最初的问题是关于最大桶数。标题是正确的,但我必须纠正问题正文中的一个拼写错误。请注意,您的输出最大桶数远高于万亿,而在我的系统上只有8个。来自cppreference.com:max_bucket_count():返回由于系统或库实现限制,容器能够容纳的最大桶数。您使用的标准库实现是什么?好问题-我将更新问题。我在使用Visual Studio 2013的Windows上看到了这个“问题”。在Linux上使用Clang 3.3和llvm标准库的最新版本时,我看不到同样的代码。在我看来,
max_size
max_bucket_count
值与将浮点/双精度错误理解为整数或其他值时所看到的数字类似。绝对可疑-可能是实现中的某些函数原型错误或其他什么。。。
size = 19953913
bucket_count = 36473443
maximum bucket_size = 9