关于Hash的那些事

注:此文已在我的网站里写过

关于Hash的那些事 (zhanghaoxvan.github.io)icon-default.png?t=N7T8https://zhanghaoxvan.github.io/blog/%E5%85%B3%E4%BA%8EHash%E7%9A%84%E9%82%A3%E4%BA%9B%E4%BA%8B.html

Hash 是一个很特殊的东西。

他有以下几点:

  • 不同数据生成的 Hash 是一样长的
  • 即使是数据之间的差距十分微小,生成的 Hash 也会完全不同
  • 即使是数据完全不同,生成的 Hash 值也可能会相同。这叫“ Hash 冲突”

C++有没有提供一种工具,用来生成Hash值么?当然有。

C++ 11 提供了一种 std::hash 类,包含在 <functional> 头文件里,用来生成 Hash 值。具体可以这么写:

            std::hash<int> h;
std::cout << h(1);            
        

我们可以自己制作一个函数,用来生成Hash值么?当然可以。以下是我写的 buildhash 函数,用来生成一个 Hash 值:

            #include <iostream>
#include <functional>
using namespace std;
template <class type> size_t buildhash(type key) {
    hash<type> h;
    return h(key);
}
int main() {
    cout << buildhash(114514);
    return 0;
}
        

在我的电脑上运行结果是:

            7762462124815608919
D:\Visual Studio 2022\Homework\x64\Debug\Homework.exe (进程 15252)已退出,代码为 0。
按任意键关闭此窗口. . .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值