unordered_set,unordered_map中自定义hashfunction

本文介绍了C++11新标准中的unordered_set和unordered_map容器,它们基于哈希实现。文章重点讨论了如何为自定义数据类型定义哈希函数,包括理解默认的hash_function行为,以及如何编写仿函数形式的hash<Key>和重载==操作符的equal_to<Key>,以确保正确插入和查找自定义类型的元素。
摘要由CSDN通过智能技术生成

写在前面

在c++11新标准中引入了unordered_set以及unordered_map,其背后是根据hash实现,而set、map等背后是根据RB_tree实现,在实现hash时,需要将数据转换为对应的hash码,放入对应的bucket中,所以这里的hash function是至关重要的

简单的hash function

我们可以通过hash_function()函数得到对应的hash function函数

函数原型:

hasher hash_function() const;
	unordered_set<string> str_set;
	unordered_set<string>::hasher fn = str_set.hash_function();
//	auto fn = s.hash_function();    //使用auto自动推断函数类型即可 
	cout << "fn("<<"value"<<") = " << fn("value") << endl;

  

可以看到内部默认的hash function将string 类型的"value"转换为一个hash value

但是如果我们在unordered_set中存放自定义的结构体

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值