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

发布于 2024-07-16 05:00:00 字数 941 浏览 7 评论 0原文

我正在尝试使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

不乱于心 2024-07-23 05:00:00

关于标准的另一个答案是正确的,但是小的 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.

咆哮 2024-07-23 05:00:00

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 an unordered_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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文