C++ 標(biāo)準(zhǔn)庫(kù)中的 std::hash (也稱為 STL Hash)是一個(gè)函數(shù)對(duì)象,主要用于計(jì)算哈希值。它是非常通用的,可以用于任何可哈希的類型,例如整數(shù)、浮點(diǎn)數(shù)、字符串等。
使用 std::hash 的步驟如下:
包含頭文件。
聲明 std::hash 對(duì)象或使用 std::hash 模板函數(shù),將值傳遞給它后,即可計(jì)算出哈希值。
例如,以下代碼演示如何使用 std::hash 計(jì)算字符串 “Hello, world!” 的哈希值:
#include <iostream>
#include <functional>
#include <string>
int main() {
std::hash<std::string> hasher;
std::size_t hash_value = hasher("Hello, world!");
std::cout << hash_value << std::endl;
return 0;
}
輸出結(jié)果將是一個(gè)在 std::size_t 范圍內(nèi)的整數(shù),例如:
13852327417439285925
除此之外,std::hash 還可以作為其他容器類型的哈希函數(shù),例如 std::unordered_map 和 std::unordered_set:
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int, std::hash<std::string>> word_count;
word_count["hello"] = 1;
word_count["world"] = 2;
std::cout << word_count["world"] << std::endl; // 輸出 2
return 0;
}
需要注意的是,如果要使用 std::hash 作為其他容器類型的哈希函數(shù),還需要提供一個(gè)相等性比較函數(shù),因?yàn)楣:瘮?shù)只能計(jì)算出一個(gè)哈希值,而無(wú)法比較兩個(gè)值是否相等。