STD :: UNORDERED_SETをハッシュ値と述語で検索します
-
29-09-2019 - |
質問
std :: unordered_setハッシュ値を知り、述語オブジェクトを検索するにはどうすればよいですか? (等価を決定する述語 pred(x) && pred(y)
意味 x == y
.)
解決
さて、あなたはハッシュ値を無視し、全体を反復することができます unsorted_set
述語のテスト。 1つのバケツのみを繰り返すことを好むので、理想的な効率ではありませんが、それはあなたが尋ねることをします。
標準 unordered_set
インターフェイスがあります begin(size_t)
特定のバケット(数字)のイテレーターとインターフェイスを取得するには bucket_count()
バケツの数を取得します。
特定のハッシュを持つオブジェクトは、すべてが同じバケツに表示されることを保証されているため、述語をテストするバケットテストであることを繰り返すだけで、やりたいことに十分です。
正しいバケツを繰り返すことを保証するために、私は実際に標準に何も見えません hash_value % bucket_count()
. 。与えられたバケットを取得する機能があります 物体, 、しかし、与えられたバケツを手に入れることではありません ハッシュ値. 。ただし、実装で試してみてください。それは合理的な推測だと思います。標準の重要な制限を見つけることができなかっただけかもしれません。
要約すると、あなたは次のようなものが欲しいと思います:
size_t bucket = hash_value % myset.bucket_count();
find_if(myset.begin(bucket), myset.end(bucket), pred);
確信はないけど。
所属していません StackOverflow