指定最低数量的水桶时建造一个提升::序映射中
-
22-08-2019 - |
题
我正尝试使用提升::序映射中要缓一些价值观。我尝试指定最低数量的水桶中的构造:
#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,任何其他版本将让你使用更桶。
不隶属于 StackOverflow