我正尝试使用提升::序映射中要缓一些价值观。我尝试指定最低数量的水桶中的构造:

#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> >());

但是,当我显示的信息,我的序映射中在结束的程序:

g++:

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

我怎么指定最低数量的水桶?

有帮助吗?

解决方案

boost::unordered_map::max_bucket_count() 返回的执行情况依赖的限制桶计数的一个 unordered_map.你似乎有超出这一限制与构造你的参数。请注意,虽然MSDN定义,这是最大桶"目前"准许的(这意味着什么)、C++0x规定了它是最桶的地图上可以永远拥有。

我从来没有使用类,并且我看不到任何东西草案C++0x规范解释为什么构造是悄悄地创造一个对象,它不会做什么你告诉它。

我也不知道是什么动机可能是背后的价值 1572869, 比这是一个largeish总理。

其他提示

在对方的回答是有关标准是正确的,但小max_bucket_count实际上是在加速1.38个bug,任何其他版本将让你使用更桶。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top