unordered_set - 非常小的max_bucket_count

时间:2014-04-21 03:25:02

标签: c++11 unordered-set

更新:我看到了这个"问题"在Windows上使用Visual Studio 2013.我没有在Linux上使用Clang 3.3和最新版本的llvm标准库看到相同的代码。尽管如此,我还没准备好把它写成微软的bug。

我注意到我正在使用的无序的一个奇怪的问题。我的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;

1 个答案:

答案 0 :(得分: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

可以看出,铲斗数实际上超过了尺寸,但铲斗仍然很小。