2014-10-27 50 views
0

我想实现一个哈希映射我自己,我想用一个数组来做到这一点。但是我现在处理的问题是如何将密钥散列到散列值。我是否需要使用不同的方法来进行哈希处理,如'int','char','string','* pointer'等不同的类型,还是有一种方法可以一起完成这些工作?我试图使用reinterpret_cast(表达式),但它不适用于'char'。STL如何工作以散列unordered_map <>的密钥?

在此先感谢。

+0

一般的方法是采用对象的原始字节表示并将其散列,就好像它是一个'unsigned char'数组。标准库(和*** NOT ***“STL”,这是一个古老的库!)实际上使用'std :: hash <>'函数对象模板的特化。它专用于原始类型以及经常使用的键类型(例如'std :: string')。 – 2014-10-27 23:56:36

+0

你可以实现一个采用'void const *'和'size_t'的散列函数。这将适用于所有没有填充的POD类型。 – 2014-10-28 00:00:46

回答

0

STL使用已经为大多数基本类型定义的模板类。事实上,在实时情况下,如果您不在这些范围内,则必须针对您自己的数据类型实施它。

模板类是hash<T>,看看here

请注意,模板不能作为Java泛型使用,你用特定类型的模板专门化来“填补空白”,在这种情况下你没有一个适用于所有类型的实现(除非你定义一个公共基类,用于将要存储在地图中的对象,或者如注释中所建议的那样,使用较低级别并采用类变量的原始字节)。