2

unordered_map はハッシュ関数を内部的にどのように使用して、キーに属するバケットにアクセスしますか?

std::hash は size_t 型を返します。これは、コンテナーに存在するバケットの数よりも大きい場合があります。返されたハッシュ値はバケット インデックスにどのようにマッピングされますか?

典型的な unordered_map 実装は size() または max_size() によって返されたハッシュのモジュロを実行しますか、それとももっと複雑なことが起こりますか?

4

1 に答える 1

5

典型的な unordered_map 実装は size() または max_size() によって返されたハッシュのモジュロを実行しますか、それとももっと複雑なことが起こりますか?

ほとんど。モジュロは になりbucket_count()ます。これは、ハッシュ テーブル内のバケットの数だからです。

標準では、モジュロ演算でこれを行う必要はありません。bucket()関数が何らかの方法でキー値を範囲[0,bucket_count)にマップし、同等のハッシュを持つキーが同じバケットにマップされるだけです。ハッシュのモジュラスは、これを行う最も簡単な方法です。

于 2013-09-09T11:40:08.310 に答える