c - 如何创建不区分大小写的 Glib 哈希表?

标签 c linux hashtable case-insensitive glib

有没有什么简单的方法可以创建不区分大小写(字符串 -> 字符串)的 Glib 哈希表?

结果应该是这样的:

GHashTable *table;
//there should be definition of table

g_hash_table_insert(table, "KeY", "Something"); //insert

//every command should return the line in table
g_hash_table_lookup(table, "Key");
g_hash_table_lookup(table, "KEY");
g_hash_table_lookup(table, "key");
g_hash_table_lookup(table, "KeY");

我认为问题只在于散列函数和比较函数的定义。但是,我不知道应该使用哪些功能。

最佳答案

g_hash_table_new 提供您自己的相等和哈希函数,而不是 g_str_equalg_str_hash

可能编写散列的最简单方法是复制一份 g_str_hash 的源代码,但在读取每个字符时,在继续之前将其转换为小写。但是您可以使用任意数量的字符串散列算法,只需调整一个以确保仅大小写不同的两个字符串将产生相同的散列值。

只要您只需要担心 ASCII 字符串,您几乎(但不完全)可以使用 g_ascii_strcasecmp 作为相等函数。您需要调整返回值。如果您想支持更大的字符集,请对该集使用不区分大小写的比较。

关于c - 如何创建不区分大小写的 Glib 哈希表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1249859/

相关文章:

c++ - 使用智能指针制作哈希表?

c++ - 有没有一种在 C/C++ 中生成 nop 操作码的可移植方法?

c - C中的矩阵排序图形

c - 当写入 txt 的输入数据大于 16kb 时应用程序崩溃(C 编程)

linux - 如何从 swagger 文档生成静态 html 文件?

c - 哪些用户可以使用 setpgid() 函数?

C++11 基于数组的哈希 : Auto not looping

arrays - 数据结构的选择

C 编程 - 将整数转换为二进制

python - 基于列表、python 的 csv 中的新列