Tag: hashmap

如何在c中实现计数hashmap?

我有6个常量字符串(每个5个字母) 我得到了几个单词的流(在这6个单词中)。 我想计算每个单词出现的次数。 我怎样才能在C中实现它? 我试过了: char searchEngineNames[6][5] = { “waze_”, “faceb”, “fours”, “googl”, “fueli”, “yello” }; static void foo(const char* res_name, int success, void *context, char *last_modified) { if (success){ for (int i=0; i<6; i++) { char substringFiveChars[6]; strncpy(substringFiveChars, res_name, 5); char substringFiveChars[6]; substringFiveChars[5] = 0; if (strcmp(searchEngineNames[i],substringFiveChars) == 0) { … } .. } […]

C字典/地图

我想映射struct成员,这样我就可以消除循环中的分支。 在C中实现此function的最佳方式或约定是什么? 我想它可能是一个二维数组而不是……然后我可以将整数映射到char键? char chunk[32]; int n; int i; char *ptr = config; while (*ptr != ‘\0’) { int items_read = sscanf(ptr, “%31[^;]%n”, chunk, &n); if(chunk[0] == ‘S’ && chunk[1] == ‘P’) { for(i=0;i<GLOBAL_MEAS_CUTOFF; i++) { theMeas[i].signal_path = atoi(&chunk[2]); } } if(chunk[0] == 'T' && chunk[1] == 'L') { for(i=0;i<GLOBAL_MEAS_CUTOFF; i++) { theMeas[i].trace_length = atoi(&chunk[2]); […]

如何实现固定大小的hashmap?

我想实现一个hashmap,但我不允许它扩展。 因为我知道我需要存储最多N元素,所以我可以为我的哈希表的每个桶预先分配一个包含N元素的数组,这样我仍然可以在最坏的情况下存储N元素,其中所有键都被散列在同一桶。 但是我需要存储的元素相当大,所以对于大N这是非常低效的内存使用。 是否可以使用固定数量的内存有效地 (就内存而言)实现散列映射,例如通过实现智能散列函数? (PS:密钥是一个无符号的32位整数,除了我将收到的键值在该范围的一个相当小的子集中之外我没有关于键的先验知识,并且该子集在该范围内移动得非常慢。) 我现在有一个实现,其中我有两个长度为N数组,一个带有元素,另一个带有与两个数组中位置i的元素对应的键。 我使用模运算作为哈希函数来确定元素应该插入/存在的位置,并使用线性探针来查找碰撞情况下最近的空白点。 我认为这是复杂的O(N),我认为这对于我期待的数据量来说会相当快。 我问了这个问题,看看能否做得更好。

ANSI C哈希表实现,在一个内存块中包含数据

我正在寻找一个哈希表的开源C实现,它将所有数据保存在一个内存块中,因此可以通过网络轻松发送。 我只能找到为每个添加到它的键值对分配小块内存的内存。 非常感谢您提前做好所有投入。 编辑:它不一定需要是一个哈希表,无论键值对表可能会做什么。

C等价于C ++ STL

可能重复: C中的标准数据结构库? C是否有类似于C ++ STL的任何数据结构实现? 特别是关联容器,哈希映射或任何其他具有大致恒定时间检索的结构? 谢谢!