首页 > 代码库 > 【hash_map】hash_map中键为自定义类型的操作
【hash_map】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中键为自定义类型的操作
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。