码迷,mamicode.com
首页 > 其他好文 > 详细

【hash_map】hash_map中键为自定义类型的操作

时间:2015-01-08 13:24:30      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:哈希表   hash_map   

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”

【hash_map】hash_map中键为自定义类型的操作

标签:哈希表   hash_map   

原文地址:http://blog.csdn.net/bupt8846/article/details/42523359

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!