2013-08-04 23 views

Trả lời

2

Hasher cũng cần được cập nhật, vì thuật toán băm mặc định does not produce identical hash code for strings that differ only in the case of their symbols - một thuộc tính thiết yếu của hàm mã băm nhằm làm việc với chuỗi không phân biệt chữ hoa chữ thường.

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

Điều này cho thấy giá trị khác nhau trên ideone:

101669370 
3305111549 
+0

câu trả lời của bạn là đúng nói chung, nhưng chúng ta đang nói về 'std :: băm ' chức năng ở đây. Vì vậy, câu trả lời của bạn có thể sai tùy thuộc vào cách 'std :: hash ' hoạt động cho các chuỗi (mà tôi không có ý tưởng)! – MBZ

+0

@MBZ Sẽ không có ý nghĩa gì khi thay đổi 'std :: hash' thành' string 'để không chú ý đến trường hợp ký tự: hàm sẽ đắt hơn về sử dụng CPU và sẽ gây ra nhiều xung đột hơn . – dasblinkenlight

+0

bạn chỉ có thể làm cho tất cả các chuỗi chữ thường trước khi bạn băm chúng – aaronman

Các vấn đề liên quan