摘自:http://blog.youkuaiyun.com/gzblog/article/details/2054354
在声明自己的哈希函数时要注意以下几点:
- 使用struct,然后重载operator().
- 返回是size_t
- 参数是你要hash的key的类型。
- 函数是const类型的。
如何在hash_map中加入自己定义的类型? 你只要做两件事, 定义hash函数,定义等于比较函数。下面的代码是一个例子:
#include <hash_map>
#include <string>
#include <iostream>
using namespace std;
//define the class
class ClassA{
public: ClassA(int a):c_a(a){}
int getvalue()const {return c_a;}
void setvalue(int a){c_a=a;}
private: int c_a;
};
//1 define the hash function
struct hash_A{
size_t operator()(constclass ClassA & A) const{
// return hash<int>(classA.getvalue());
return A.getvalue();
}
};
//2 define the equal function
struct equal_A{
bool operator()(constclass ClassA & a1, const class ClassA & a2) const{
return a1.getvalue() == a2.getvalue();
}
};
int main(){
hash_map<ClassA, string, hash_A, equal_A> hmap;
ClassA a1(12);
hmap[a1]="I am 12";
ClassA a2(198877);
hmap[a2]="I am 198877";
cout<<hmap[a1]<<endl;
cout<<hmap[a2]<<endl;
return 0;
}
I am 12
I am 198877