Question

Comment puis-je rechercher un std :: unordered_set connaître la valeur de hachage et ayant un objet prédicat? (Le prédicat détermination de l'équivalence par pred(x) && pred(y) sens x == y.)

Était-ce utile?

La solution

Eh bien, vous pouvez ignorer la valeur de hachage et itérer l'ensemble unsorted_set tester le prédicat. Pas l'efficacité idéale, puisque vous préférez seau une seule itérer, mais il fait ce que vous demandez.

unordered_set standard a une begin(size_t) d'interface pour obtenir un itérateur pour un seau particulier (en nombre), et une bucket_count() d'interface pour obtenir le nombre de seaux.

Objets avec un hachage donné sont garantis à tous apparaissent dans le même seau, de sorte que itérer seau tester le prédicat est suffisant pour ce que vous voulez faire.

Je ne peux pas voir quoi que ce soit dans la norme pour garantir le bon seau à itérer est hash_value % bucket_count(). Il y a une fonction pour obtenir le seau pour une donnée objet , mais pas pour obtenir le seau pour une donnée valeur de hachage . Essayez-le sur votre mise en œuvre, bien. Je pense qu'il est une estimation raisonnable, et je peux juste ai pas réussi à trouver la restriction cruciale dans la norme

En résumé, je pense que vous voulez quelque chose comme:

size_t bucket = hash_value % myset.bucket_count();
find_if(myset.begin(bucket), myset.end(bucket), pred);

mais je ne suis pas sûr.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top