2

更新:我在使用 Visual Studio 2013 的 Windows 上看到了这个“问题”。在使用 Clang 3.3 和最新版本的 llvm 标准库的 Linux 上,我没有看到这个“问题”。尽管如此,我还没有准备好将其作为 Microsoft 错误注销。

我注意到我正在使用的 unordered_set 存在一个奇怪的问题。我的 load_factor 为 1,最大大小为数百万,但以下显示 maximum_bucket_count 仅为 8。我尝试使用不同类型的集合。

谁能解释一下?

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

std::unordered_set<int> testSet;
std::cout << "max_size = " << testSet.max_size() << std::endl;
std::cout << "max_bucket_count = " << testSet.max_bucket_count() << std::endl;
std::cout << "max_load_factor = " << testSet.max_load_factor() << std::endl;
4

1 回答 1

0

http://en.cppreference.com/w/cpp/container/unordered_set/bucket_size

bucket_size(bucket index)是具有该索引的存储桶中的元素数。它应该很小。

bucket_count()是桶的数量。应该是大约size()

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

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

在 20000000 个随机整数之后:

size = 19953913
bucket_count = 36473443
maximum bucket_size = 9

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

于 2014-04-21T09:54:32.343 回答