【发布时间】:2022-01-28 18:25:32
【问题描述】:
我正在尝试在 c 中实现一个通用的 hashmap 但它无法将存储桶插入存储桶列表。 我不知道为什么程序没有任何错误就退出了。 请帮我。 我需要使用这个 hashmap 来为我的 cs 项目实现 LRU 缓存。
typedef struct Bucket Bucket;
struct Bucket
{
void *Key;
void *Value;
};
typedef struct HashMap HashMap;
struct HashMap
{
Bucket *BucketList;
size_t Size;
size_t KeySize;
size_t ValueSize;
int Entries;
};
HashMap *insert(HashMap *map, void *key, void *value)
{
if (isOverLoad(map->Entries, map->Size, LOADFACTOR))
{
printf("\nMap is Overloaded.. Rehasing");
map = reHash(map);
}
int bucketindex = hash(map->Size, key);
printf("\nBucket index: %d",bucketindex);
if (map->BucketList[bucketindex].Value != NULL)
{
printf("\nCollision! ");
// printf("%s and %s", (char *)map->BucketList[bucketindex].Key, (char *)key);
}
else
{
printf("\nEntering value");
map->BucketList[bucketindex].Key = malloc(map->KeySize);
for (int i = 0; i < map->KeySize; i++)
{
*(((char *)map->BucketList[bucketindex].Key) + i) = *(((char *)key) + i);
}
map->BucketList[bucketindex].Value = malloc(map->ValueSize);
for (int i = 0; i < map->ValueSize; i++)
{
*(((char *)map->BucketList[bucketindex].Value) + i) = *(((char *)value) + i);
}
map->Entries++;
}
return map;
}
【问题讨论】:
-
我们能否获得一个最小可重现示例 [stackoverflow.com/help/minimal-reproducible-example]?您可以使用
memcpy将键、值复制到存储桶中
标签: c data-structures hashmap