2017-06-09 19 views
1

boost :: unordered_multimapを初期化するとき、ハッシュマップのサイズを定義します。boost :: unordered_multimap resize

explicit unordered_multimap(size_type n = implementation-defined, 
          hasher const& hf = hasher(), 
          key_equal const& eq = key_equal(), 
          allocator_type const& a = allocator_type()); 

Constructs an empty container with at least n buckets, using hf as the hash function, eq as the key equality predicate, a as the allocator and a maximum load factor of 1.0. 

ハッシュマップがほとんどいっぱいになると、サイズが変更されますか?そのようなAPIを持っているようには見えません。それは自動的に行いますか? unordered_multimapのサイズを定義するベストプラクティスは何ですか?それは自動的にそれを行います

+3

はい、自動的にサイズが変更されます。そうでなかった場合、ほとんど使用できなくなります。ベストプラクティスは、初期化時にサイズを推測したり、可能でない場合は独自のサイズを選択させたりすることです。 –

+0

いつサイズを変更するのですか? –

+1

私はコード自体を勉強していないと確信することはできませんが、著者が合理的な妥協を選んだと確信しています。 –

答えて

1

as documented:バケット数を自動的に挿入するための呼び出しによって増加、または焼き直しの呼び出しの結果としてでき

しかし、それが縮小したときに焼き直していない点に注意してください。Why does C++11/Boost `unordered_map` not rehash when erasing?

を手動下負荷率を強制的に、そして(http://www.boost.org/doc/libs/1_64_0/doc/html/boost/unordered_map.html#idp776321712-bbhttp://www.boost.org/doc/libs/1_64_0/doc/html/boost/unordered_map.html#idp776318000-bb)十分に高い最大負荷率を設定することにより、不要な再ハッシュを防ぐことができます