1

有没有什么简单的方法可以创建一个不区分大小写的(字符串->字符串)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");

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

4

2 回答 2

4

g_hash_table_new为, 而不是g_str_equaland提供您自己的相等和散列函数g_str_hash

可能编写散列的最简单方法是获取源的副本g_str_hash,但在读取每个字符时,将其推为小写,然后再继续。但是您可以使用任意数量的字符串散列算法,只需调整一种以确保两个仅大小写不同的字符串将产生相同的散列值。

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

于 2009-08-08T21:17:05.913 回答
3

你为什么不使用类似的东西来转换密钥tolower()?这样密钥是标准化的,因此您的哈希表也将是标准化的。

于 2009-08-08T20:49:07.700 回答