C++ STL如何散列无序映射的键?

C++ STL如何散列无序映射的键?,c++,hash,stl,unordered-map,C++,Hash,Stl,Unordered Map,我正在尝试自己实现一个哈希映射,我想使用一个数组来实现它。但我目前正在处理的问题是如何将密钥散列到散列值。对于不同的类型,如“int”、“char”、“string”和“*pointer”,我是否需要使用不同的方法来进行散列,还是有一种方法可以一起进行?我试图使用reinterpret_castexpression,但它对“char”不起作用 提前感谢。STL使用的模板类已为大多数基本类型定义。事实上,在实时场景中,如果超出这些界限,您必须为自己的数据类型实现它 模板类是hash,请看一看 请注

我正在尝试自己实现一个哈希映射,我想使用一个数组来实现它。但我目前正在处理的问题是如何将密钥散列到散列值。对于不同的类型,如“int”、“char”、“string”和“*pointer”,我是否需要使用不同的方法来进行散列,还是有一种方法可以一起进行?我试图使用reinterpret_castexpression,但它对“char”不起作用


提前感谢。

STL使用的模板类已为大多数基本类型定义。事实上,在实时场景中,如果超出这些界限,您必须为自己的数据类型实现它

模板类是hash,请看一看


请注意,模板不能像Java泛型那样工作,您需要为特定类型使用模板专门化来填补这个漏洞,在这种情况下,您没有一个适用于所有模板的实现,除非您为要存储在映射中的对象定义一个公共基类,或者,如注释中所建议的,您可以使用较低级别的实现,并获取类变量的原始字节。

通常的方法是获取对象的原始字节表示,并将其散列,就像它是一个无符号字符数组一样。标准库而不是STL,这是一个古老的库!实际上使用std::hash函数对象模板的专门化。它专门用于基本类型以及常用的密钥类型e。Gstd::string。您可以实现一个哈希函数,该函数接受一个void常量*和一个size\t。这将适用于所有没有填充的POD类型。