類模板
<functional>

std::hash

template <class T> struct hash;
預設雜湊函式物件類
定義了標準庫所使用的預設雜湊函式的單目函式物件類。

函式呼叫返回其引數的雜湊值:雜湊值是僅取決於其引數的值,對於相同的引數(在程式的給定執行中)總是返回相同的值。對於不同的引數,返回值應具有很小的相同機率(發生碰撞的機率接近 1/numeric_limits<size_t>::max)。

其他函式物件型別可以作為無序容器的 Hash 使用,前提是它們表現如上所述,並且它們至少是可複製構造可析構的函式物件。

預設的 hash 是一個模板類,對於一般情況沒有定義。但所有庫實現都至少提供以下型別特定的特化:

標頭檔案型別
<functional>bool
char
signed char
unsigned char
char16_t
char32_t
wchar_t
short
unsigned short
int
unsigned int
long
unsigned long
long long
unsigned long long
float
double
long double
T* (對於任何型別 T)
<string>string
wstring
u16string
u32string
<memory>unique_ptr
shared_ptr
<vector>vector<bool>
<bitset>bitset
<system_error>error_code
<typeindex>type_index
<thread>thread::id

除了可呼叫具有相應型別引數的物件外,所有 hash 例項化的物件都是預設可構造可複製構造可複製賦值可析構並且可交換的。

使用者可以為此模板提供具有相同屬性的自定義特化。

成員型別

成員型別定義說明
result_typesize_t生成的雜湊值型別。
argument_typeT作為引數的值的型別。

成員函式

operator()
size_t 型別的值返回其引數的雜湊值。
size_t 是一個無符號整數型別。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// hash example
#include <iostream>
#include <functional>
#include <string>

int main ()
{
  char nts1[] = "Test";
  char nts2[] = "Test";
  std::string str1 (nts1);
  std::string str2 (nts2);

  std::hash<char*> ptr_hash;
  std::hash<std::string> str_hash;

  std::cout << "same hashes:\n" << std::boolalpha;
  std::cout << "nts1 and nts2: " << (ptr_hash(nts1)==ptr_hash(nts2)) << '\n';
  std::cout << "str1 and str2: " << (str_hash(str1)==str_hash(str2)) << '\n';

  return 0;
}

輸出
same hashes:
nts1 and nts2: false
str1 and str2: true


異常安全

無異常保證:無成員丟擲異常(這適用於庫實現中提供的特化)。自定義特化可能提供不同的保證。