2014-08-27 60 views
0

你好我想知道是否有可能存儲一個浮點作爲關鍵入GhashTable考慮到沒有GFLOAT_TO_POINTER宏方法。在GhashTable中存儲float作爲鍵

我正在按照IBM http://www.ibm.com/developerworks/linux/tutorials/l-glib/section5.html在線找到的教程進行操作,但似乎無法找到將float用作鍵的方法。

任何幫助將非常感謝!

typedef struct Settings settings; 
typedef struct Preset preset; 

struct Gnomeradio_Settings 
{ 
    GList *presets; 
}; 

struct Preset 
{ 
    gchar *name; 
    gfloat freq; 
}; 

我希望把所有頻率從settings.presets清單爲重點的GHashTable

GHashTable *hash; 
GList  *node; 

hash = g_hash_table_new (g_double_hash, g_double_equal); 
for (node = settings.presets; node; node = node->next) { 
    preset *ps; 
    gfloat *f; 

    ps = (preset *) node->data; 
    f = g_malloc0 (sizeof (gfloat)); 
    *f = ps->freq; 
    g_hash_table_insert (hash, f, NULL); 
} 

void printf_key (gpointer key, gpointer value, gpointer user_data) 
{ 
    printf("\t%s\n", (char *) key); 
} 

void printf_hash_table (GHashTable* hash_table) 
{ 
    g_hash_table_foreach (hash_table, printf_key, NULL); 
} 

printf_hash_table (hash); 

但都沒有成功!

本刊:

���B 
ff�B 
ff�B 
���B 
ff�B 
f��B 
f��B 
���B 
33�B 
ff�B 
�L�B 
���B 
�̲B 
+0

看到這個[答案](http://stackoverflow.com/questions/25298327/ghashtable-that-using-uint64-t-as-鍵 - 和 - a-結構-AS-值/ 25298461#25298461)。 – 2014-08-27 12:14:55

+1

也請參閱此答案:http://stackoverflow.com/a/6685020/390913 – perreal 2014-08-27 12:29:11

回答

1

你的代碼看起來正確的我,除了打印出鍵值的程序。我想你的意思是這樣,這將輸出的每個gfloat值的字符串:

void printf_key (gpointer key, gpointer value, gpointer user_data) 
{ 
    printf("\t%f\n", *(gfloat *) key); 
} 

爲了避免內存泄漏,你應該也可以創建哈希表這樣的,所以你分配了每個按鍵的內存會自動釋放當表被破壞(或重複的鍵被插入):

hash = g_hash_table_new_full (g_double_hash, g_double_equal, g_free, NULL); 
相關問題