ブースト:: unordered_mapを構築する際にバケツの最小数を指定します。

StackOverflow https://stackoverflow.com/questions/694572

  •  22-08-2019
  •  | 
  •  

質問

私はいくつかの値をキャッシュするために、ブースト:: 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

どのように私はバケツの最小数を指定するのですか?

役に立ちましたか?

解決

boost::unordered_map::max_bucket_count()unordered_mapのバケット数に実装依存の制限を返します。あなたのコンストラクタパラメータでこの制限を超えているように見えます。なお、MSDNには、これはC ++ 0xの仕様は、それはマップが今まで持つことができます。ほとんどのバケットであることを定義する最大バケット「現在」(どんなことを意味します)許可、であることを規定している間、

私は、クラスを使ったことがない、と私はコンストラクタは黙ってあなたにそれを告げ何をしないオブジェクトを作成している理由を説明するためのドラフトC ++ 0xの仕様には何も見ることができません。

私もモチベーションはそれが大きめの首相だということ以外の値の1572869、背後にあるかもしれないのか分からない。

他のヒント

他の答えが標準に関する正しいですが、小さなmax_bucket_countは実際にブースト1.38のバグで、他のバージョンでは、あなたがより多くのバケットを使用できるようになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top