C++ 自己实现一个unordered_map(hashmap)

今天面试的时候遇到面试官出了一个问题,要实现一个unordered_map. 我实现的不太好,所以面试之后重新自己整理实现了一个unordered_map,在此记录一下。

首先unordered_map的底层实现是哈希表。那么对于任何一个关键key的哈希,首先需要考虑的是哈希冲突的问题,在这里应该用链表的方式解决。如果不同的key哈希成了同一个地址,那么在链表的基础上向后连接就行。然后主要实现的是增删改查的功能,代码实现如下:

#include <iostream>
#include <string>
#include <queue>
#include <vector>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <functional>
using namespace std;

//自定义的哈希函数类
class HashFunc{
public:
	int operator()(const int key){//对于int类型的key对应的hash函数,随便编的,不要在意这些细节
		return 3 * key + 1;
	}
};

template <typename Key, typename Value>//这是链表节点,包括key和value
class HashNode{
public:
	Key key;
	Value value;
	HashNode *next;
	HashNode(Key _key, Value _value) :key(_key), value(_value), next(NULL){}
	~HashNode(){}
};

template <typename Key, typename Value, typename HashFunc>
class HashMap{
public:
	int size;
	HashFunc hash;//hash是自定义的哈希函
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值