Frage

Wie kann ich eine std :: unordered_set wissen Hash-Wert suchen und einige Prädikat-Objekt zu haben? (Das Prädikat Bestimmung Äquivalenz von pred(x) && pred(y) Bedeutung x == y.)

War es hilfreich?

Lösung

Nun, könnten Sie den Hash-Wert ignorieren und Iterierte die gesamte unsorted_set das Prädikat zu testen. Nicht die ideale Effizienz, da Sie nur Iterierte einen Eimer bevorzugen würden, aber es tut, was Sie fragen.

Standard unordered_set verfügt über eine Schnittstelle begin(size_t) einen Iterator für einen bestimmten Eimer (nach Anzahl) zu erhalten, und eine Schnittstelle bucket_count() die Anzahl der Schaufeln zu erhalten.

Objekte mit einem bestimmten Hash sind alle garantiert erscheinen in der gleichen Eimer, so dass die Eimer Iterieren das Prädikat Prüfung ist ausreichend für das, was Sie tun möchten.

Ich kann nicht wirklich etwas in der Norm sehen den richtigen Eimer zu garantieren Iterierte hash_value % bucket_count() ist. Es gibt eine Funktion, um den Eimer für einen bestimmten Objekt erhalten , aber nicht den Eimer für einen bestimmten zu bekommen Hashwert . Versuchen Sie es auf Ihrer Implementierung, aber:. Ich denke, es ist eine vernünftige Vermutung, und ich kann nur versagt haben die entscheidende Einschränkung in der Norm finden

Zusammenfassend, ich glaube, Sie wollen so etwas wie:

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

, aber ich bin nicht sicher.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top