class person
{
public:
string name;
int age;
person(string s,int i):name(s),age(i){}
};
struct person_hash
{
static const size_t bucket_size = 4;
static const size_t min_buckets = 8;
//哈希值函数
size_t operator()(const person &p)const
{
//原来使用 return hash<int>()(p.age)+hash<const char*>()(p.name.c_str());
//总是报错,原来是因为不同的string类型的对象,转化成const char*后,哈希值是不一样的!!!
//于是把person的哈希值改成年龄的哈希值加上名字第一个字母的哈希值
return hash<int>()(p.age)+hash<char>()(p.name[0]);
}
//小于号比较函数
bool operator()(const person &p1,const person &p2)const
{
if(p1.name<p2.name)
return true;
else if(p1.name>p2.name)
return false;
else
{
return p1.age<p2.age;
}
}
};
//测试代码
hash_map<person,string,person_hash> a;
person p1("Tom",22);
person p2("Jim",40);
a.emplace(p1,"1553");
a.emplace(p2,"6667");
cout<<a[p2]<<endl; //输出字符串“6667”原文:http://blog.csdn.net/bupt8846/article/details/42523359