在构造boost :: unordered_map时指定最小桶数

时间:2009-03-29 12:39:53

标签: c++ boost unordered-map

我正在尝试使用boost :: unordered_map来缓存一些值。我尝试在构造函数中指定最小桶数:

#include <boost/unordered_map.hpp>
typedef boost::unordered_map<float, float> Mycache;
Mycache cache((std::size_t)25165843,
              boost::hash<float>(),
              std::equal_to<float>(),
              std::allocator<std::pair<float const, float> >());

但是当我在程序结束时显示有关我的unordered_map的信息时:

克++:

unordered_map.size(): 15861612
unordered_map.load_factor: 10.0845
unordered_map.bucket_count: 1572869
unordered_map.max_size: 1572868
unordered_map.max_load_factor: 1
unordered_map.max_bucket_count: 1572869

VC ++:

unordered_map.size(): 13916119
unordered_map.load_factor: 8.8476
unordered_map.bucket_count: 1572869
unordered_map.max_size: 1572868
unordered_map.max_load_factor: 1
unordered_map.max_bucket_count: 1572869

如何指定最小数量的存储区?

2 个答案:

答案 0 :(得分:3)

关于标准的另一个答案是正确的,但是小max_bucket_count实际上是Boost 1.38中的一个错误,任何其他版本都会让你使用更多的桶。

答案 1 :(得分:2)

boost::unordered_map::max_bucket_count()返回unordered_map的桶数的依赖于实现的限制。您的构造函数参数似乎已超出此限制。请注意,虽然MSDN将此定义为“当前”允许的最大存储桶(无论这意味着什么),但C ++ 0x规范将其定义为地图可能拥有的最多存储桶。

我从来没有使用过这个类,我在C ++ 0x规范草案中看不到任何东西来解释为什么构造函数会默默地创建一个不按你所说的去做的对象。

我也不知道价值1572869背后的动机是什么,除了它是一个很大的素数。