2013-08-04 15 views

risposta

2

Anche Hasher deve essere aggiornato, poiché l'algoritmo hash predefinito does not produce identical hash code for strings that differ only in the case of their symbols - una proprietà essenziale della funzione del codice hash destinata a funzionare con stringhe maiuscole e minuscole.

std::string s1 = "Hello"; 
std::string s2 = "hello"; 
std::hash<std::string> hash_fn; 

size_t hash1 = hash_fn(s1); 
size_t hash2 = hash_fn(s2); 

std::cout << hash1 << '\n'; 
std::cout << hash2 << '\n'; 

Questo mostra valori diversi su Ideone:

101669370 
3305111549 
+0

La tua risposta è giusta in generale, ma stiamo parlando di 'std :: hash ' funzione di qui. Quindi la tua risposta potrebbe essere sbagliata a seconda di come 'std :: hash ' funziona per le stringhe (che non ho idea)! – MBZ

+0

@MBZ Non avrebbe senso modificare 'std :: hash' per' stringa's per non prestare attenzione al caso dei caratteri: la funzione sarebbe più costosa in termini di utilizzo della CPU, e comporterebbe più collisioni, anche . – dasblinkenlight

+0

potresti semplicemente rendere tutte le stringhe in minuscolo prima di eliminarle. – aaronman

Problemi correlati