如果想用哈希的时候,但是哈希的目标又不再STL标准的类型内,比如一个自定义的class,就不太方便使用STL默认的哈希函数,比较函数,那么就需要重写了
什么是哈希
哈希就是搞一大块内存,然后给他们编号,然后通过一定的手段,对每个要存储的对象,尽量通过哈希函数得到不同的值,根据这个值放到对应的内存中
冲突
假设使用的哈希函数是 %4 ,要存储的数据类型是int,存储 16 和 64 这两个数字的时候,会发现 %4 都=0,那么照成了冲突,但是哈希set/map底层会帮我们处理(比如使用线性探查向后找空位),所以我们
- 不但需要定义哈希函数,还要定义判断是否等于的函数
数据类型定义:
现在定义一个三维的向量vec3
class vec3
{
public:
vec3();
vec3(int _x, int _y, int _z){
x=_x; y=_y; z=_z;}
int x,y,z;
};
定义哈希函数:
根据向量的每一个维度的不同,通过一定的计算,得到一个值,注意类型要用size_t
来返回
这里定义的哈希值是 hashval = x*14514 + y*19 + z
struct hashfunc
{
size_t operator()(