Implementé un resultado de caché de búsqueda que consiste en claves de tipo State (una clase con 7 entradas cortas) y valores de tipo Socre (una clase de 3 dobles). Usar unordered_map fue al menos 20 veces más lento que el mapa. ¿Por qué?¿Por qué el mapa sería mucho más rápido que unordered_map?
Edit: Darn it! Mi función hash era
namespace std {
size_t hash<State>::operator()(State const& s) const {
size_t retval = hash<short>()(s.s[0]);
for (int i = 1; i < R; i += 2) { // 1 3 5
int x = (static_cast<int>(s.s[i + 1]) << 16)
+ (static_cast<int>(s.s[i]));
hash_combine(retval, x);
}
}
}
me olvidó return retval
, así que todo era chocar! Deseo que unordered_map tenga una función hash_function_quality() que informa el número promedio de colisiones.
¿Cuál es su patrón de acceso? –
¿Qué plataforma/compilador? – ThomasMcLeod
intel i5, gcc, 6 cien mil inserciones y búsquedas –