3

我正在尝试使用 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

如何指定最小桶数?

4

2 回答 2

3

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

于 2009-06-22T15:08:24.070 回答
2

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

我从未使用过该类,并且在 C++0x 规范草案中看不到任何内容来解释为什么构造函数会默默地创建一个对象,而该对象并没有按照您的要求执行。

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

于 2009-03-29T13:48:59.787 回答