unordered_map和unordered_set实现(底层封装哈希表)

个人主页:Lei宝啊 

愿所有美好如期而遇


 


前言

在看这篇文章前,建议先了解哈希表的实现:哈希表模拟实现

如果说你对哈希表的实现很清楚,那么可以直接往下看,但是本篇文章对unordered_map和unordered_set的封装使用的哈希表是哈希表模拟实现的一种更改。

我们会指出哪里做了更改以及为什么做更改,但是上篇文章提起过的这里不会再提及。

这里贴出哈希表代码:

//开散列哈希表
namespace Open
{

	template<class K, class V>
	struct HashNode
	{
		HashNode<K, V>* next;
		pair<K, V> _kv;

		HashNode(const pair<K, V>& kv)
			:next(nullptr)
			,_kv(kv)
		{}
	};

	template<class K, class V, class Hash = HashFunc<K>>
	class HashTable;

	template<class K, class V, class Hash = HashFunc<K>>
	class HashIterator
	{
		typedef HashNode<K, V> Node;
		typedef HashTable<K, V, Hash> hstable;
		typedef HashIterator<K, V, Hash> iterator;

	public:

		HashIterator(Node* n, hstable* h)
			:node(n)
			,hst(h)
		{}

		iterator& operator++()
		{
			if (node->next)
			{
				node = node->next;
				
			}
			else
			{
				Hash hs;
				int pos = hs(node->_kv.first) % hst->_table.size();

				pos++;

				while (pos < hst->_table.size())
				{
					if (hst->_table[pos])
					{
						node = hst->_table[pos];
						break;
					}

					pos++;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lei宝啊

觉得博主写的有用就鼓励一下吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值