hash_map C++实现

本文介绍了使用C++实现hash_map的详细步骤,包括结构体定义、哈希函数设计、插入、查找、删除等操作。通过自定义MyList类,实现了HashMap的创建、键值对的增删查改功能,并提供了相关辅助方法展示HashMap信息。
摘要由CSDN通过智能技术生成
#include<iostream.h>
#include<stdlib.h>

const int MapSize = 1024;
struct hashmap_ele
{
	int key; //key
	int value; //value
	int in_use; //开始时位置上无元素,未被占用
	hashmap_ele * multis; //hash地址相同的值,通过索引链接他
};

struct hash_map
{
	int table_size; //总大小
	int size; //当前的大小
	hashmap_ele * date; //数据的链接
};

hash_map * map_head;

//MyList类
class MyList
{
public:
	hash_map * CreateHashMap(); //创建HashMap
	int GetPosition(hash_map *m, int key); //计算键值对存储的位置
	bool IsInUse(hash_map *m, int key); //判断位置上是否已经有元素
	int IsKeyExists(hash_map *m, int key); //判断map中是否已经存在该键
	void SetKey(int key, int val); //加入键值对
	void DisEntry(hash_map *m); //打印所有的键值对
	void DeleteKey(int key); //删除指定的键值对
	int SearchKey(int key); //搜索出与指定键对应的值
	int GetMapSize();
	void ShowInfo(hash_map * m); //输出map的相关信息
};

//创建HashMap
hash_map * MyList::CreateHashMap()
{
	hash_map *m;
	m = (hash_map *)malloc(sizeof(hash_map)); //创建HashMap,分配空间
	m->date = (hashmap_ele *)calloc(MapSize, sizeof(hashmap_ele)); //为HashMap的数据分配空间,初始空间为1024
	m->table_size = MapSize; //指定总的大小
	m->size = 0; //指定当前的大小
    
	return m;
}

//得到key的存储位置
int MyList::GetPosition(hash_map *m, int key) //得到键值对存储的位置
{
	key += (key << 12);
	key ^= (key >> 22);
	key += (key << 4);
	key ^= (key << 9);
	key += (key << 10);
	key ^= (key >> 2);
	key += (key << 7);
	key ^= (key 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值