2013-08-04 7 views

Antwort

2

Hasher muss ebenfalls aktualisiert werden, da der Standard-Hashalgorithmus does not produce identical hash code for strings that differ only in the case of their symbols - eine essentielle Eigenschaft der Hash-Code-Funktion ist, die für die Verwendung von Groß- und Kleinbuchstaben verwendet werden soll.

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'; 

Dies zeigt unterschiedliche Werte auf ideone:

101669370 
3305111549 
+0

Ihre Antwort richtig ist im Allgemeinen, aber wir sprechen über 'std :: Hash ' Funktion hier. Ihre Antwort kann also falsch sein, je nachdem, wie 'std :: hash ' für Strings funktioniert (was ich nicht weiß)! – MBZ

+0

@MBZ Es wäre nicht sinnvoll, den 'std :: hash' zu ändern, damit' string's keinen Zeichenfall berücksichtigt: Die Funktion wäre in Bezug auf die CPU-Nutzung teurer und würde auch zu mehr Kollisionen führen . – dasblinkenlight

+0

Sie könnten einfach alle Zeichenfolgen Kleinbuchstaben machen, bevor Sie sie Hash- – aaronman