Ho implementato un risultato di memorizzazione nella cache di ricerca costituito da chiavi di tipo State (una classe con 7 brevi valori) e valori di tipo Socre (una classe di 3 doppi). L'uso di unordered_map era almeno 20 volte più lento della mappa. Perché?Perché la mappa dovrebbe essere molto più veloce di unordered_map?
Modifica: dannatamente! La mia funzione di 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);
}
}
}
ho dimenticato di return retval
, così è stato tutto in collisione! Vorrei che unordered_map avesse una funzione hash_function_quality() che riporta il numero medio di collisioni.
Qual è il tuo modello di accesso? –
Quale piattaforma/compilatore? – ThomasMcLeod
intel i5, gcc, 6.000 mila inserti e ricerche –