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

时间:2009-08-08 20:45:44

标签: c linux hashtable case-insensitive glib

有没有简单的方法如何创建不区分大小写(String - > String)的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");

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

2 个答案:

答案 0 :(得分:4)

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

编写哈希值的最简单方法可能是获取g_str_hash的源代码副本,但在读取每个字符时,请在继续之前将其推送到小写字母。但是你可以使用任意数量的字符串哈希算法,只需调整一个以确保只有大小写不同的两个字符串将产生相同的哈希值。

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

答案 1 :(得分:3)

为什么不用tolower()之类的东西来改变密钥?这样,密钥就是标准化的,因此你的哈希表也是如此。