Pregunta

¿Cómo puedo buscar un std :: valor hash saber unordered_set y tener algún objeto predicado? (El predicado determinar la equivalencia por pred(x) && pred(y) significa x == y.)

¿Fue útil?

Solución

Bueno, podía pasar por alto el valor hash y iterate todo el unsorted_set probar el predicado. No es la eficiencia ideal, ya que prefiere un cubo única iterate, pero hace lo que se le pregunte.

unordered_set estándar tiene una begin(size_t) interfaz para obtener un iterador para un cubo en particular (por número), y un bucket_count() interfaz para obtener el número de cubetas.

Los objetos con un hash dado están garantizados para todos aparecen en el mismo cubo, por lo que la iteración de ese cubo probar el predicado es suficiente para lo que quiere hacer.

No puedo ver realmente nada en la norma para garantizar el cubo correcto para iterar es hash_value % bucket_count(). Hay una función para obtener el cubo para un objeto dado , pero no para conseguir el cubo para un determinado valor hash . Probarlo en su aplicación, sin embargo:. Creo que es una suposición razonable, y puede que solo he podido encontrar la restricción crucial en el estándar

En resumen, creo que quiere algo como:

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

pero no estoy seguro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top