#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
hash_map C++实现
最新推荐文章于 2022-11-17 10:16:22 发布
本文介绍了使用C++实现hash_map的详细步骤,包括结构体定义、哈希函数设计、插入、查找、删除等操作。通过自定义MyList类,实现了HashMap的创建、键值对的增删查改功能,并提供了相关辅助方法展示HashMap信息。
摘要由CSDN通过智能技术生成