2009-08-08 14 views
1

大文字小文字を区別しない(String - > String)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"); 

私はこの問題は、のみハッシュ関数とcomparement関数の定義であると思います。しかし、どの機能を使うべきか分かりません。

答えて

3

tolower()のようなものを使用してキーを変換してみませんか?そのようにしてキーが標準化され、ハッシュテーブルも標準化されます。

+0

すべてのロケールでtolower()を使用することは安全でない場合があります。より良い代替手段はg_utf8_casefold()です(バージョン2.2のglibで利用可能です)。 – Fabel

4

g_str_equalg_str_hashの代わりに、g_hash_table_newに独自の等価関数とハッシュ関数を指定します。

ハッシュを書く最も簡単な方法は、g_str_hashのソースのコピーを取ることですが、各文字を読むときは、先に進む前に小文字にしてください。しかし、あなたが使うことができる文字列ハッシュアルゴリズムはいくつでもあります。大文字と小文字だけが異なる2つの文字列が同じハッシュ値になるように、文字列アルゴリズムを適応させてください。

ASCII文字列だけを心配する必要がある限り、同等性機能にはほぼg_ascii_strcasecmpを使用できます。戻り値を調整する必要があります。大きな文字セットをサポートする場合は、そのセットに対して大文字と小文字を区別しない比較を使用します。

関連する問題