要自定義哈希函數(shù),需要實現(xiàn)一個哈希函數(shù)對象,并將其作為模板參數(shù)傳遞給unordered_map或unordered_set。以下是一個簡單的示例:
#include <iostream>
#include <unordered_map>
#include <string>
struct MyHashFunction {
std::size_t operator()(const std::string& str) const {
// 自定義哈希函數(shù),這里簡單地返回字符串長度作為哈希值
return str.length();
}
};
int main() {
std::unordered_map<std::string, int, MyHashFunction> myMap;
myMap["apple"] = 5;
myMap["banana"] = 10;
std::cout << "apple: " << myMap["apple"] << std::endl;
std::cout << "banana: " << myMap["banana"] << std::endl;
return 0;
}
在上面的示例中,我們定義了一個名為MyHashFunction的結(jié)構(gòu)體,重載了operator()函數(shù)來自定義哈希函數(shù)。然后在創(chuàng)建unordered_map時,將MyHashFunction作為第三個模板參數(shù)傳遞給unordered_map,這樣就可以使用自定義的哈希函數(shù)來計算鍵的哈希值了。
當(dāng)插入或查找鍵時,unordered_map會使用自定義的哈希函數(shù)來計算對應(yīng)的哈希值,從而確定元素在哈希表中的位置。