更新:我看到了这个"问题"在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;
答案 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
可以看出,铲斗数实际上超过了尺寸,但铲斗仍然很小。