构造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 的信息时:
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
如何指定最小桶数?
I am trying to use boost::unordered_map to cache some values. I try to specify minimum number of buckets in the constructor:
#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> >());
But when I display information about my unordered_map at the end of program:
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
How do I specify the minimum number of buckets ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
关于标准的另一个答案是正确的,但是小的
max_bucket_count
实际上是 Boost 1.38 中的一个错误,任何其他版本都会让你使用更多的存储桶。The other answer is correct about the standard, but the small
max_bucket_count
is actually a bug in Boost 1.38, any other version will let you use more buckets.boost::unordered_map::max_bucket_count()
返回对unordered_map
的存储桶计数的实现相关限制。 您的构造函数参数似乎超出了此限制。 请注意,虽然 MSDN 将其定义为“当前”允许的最大存储桶(无论这意味着什么),但 C++0x 规范将其定义为映射可以拥有的最多存储桶。我从未使用过该类,并且在 C++0x 规范草案中看不到任何内容来解释为什么构造函数默默地创建一个不执行您告诉它的操作的对象。
我也不知道
1572869
值背后的动机是什么,除了它是一个较大的素数之外。boost::unordered_map::max_bucket_count()
returns the implementation-dependent limit on the bucket count of anunordered_map
. You appear to have exceeded this limit with your constructor parameter. Note that while MSDN defines this to be the max buckets "currently" permitted (whatever that means), the C++0x spec defines it to be the most buckets the map can ever have.I've never used the class, and I can't see anything in the draft C++0x spec to explain why the constructor is silently creating an object which doesn't do what you told it to.
I also don't know what the motivation might be behind the value
1572869
, other than that it's a largeish prime.