更新:在使用Visual Studio 2013的Windows上,我看到了这个“问题”。在使用Clang 3.3和llvm标准库的最新版本的Linux上,我没有看到相同的代码。 不过,我还不准备将其作为Microsoft bug写下。

我注意到我正在使用的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;

===============>>#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

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

  ask by Arbalest translate from so

未解决问题?本站智能推荐: