您好,我在想,考虑到没有GFLOAT_TO_POINTER宏方法,是否可以将浮点数作为键存储到GhashTable中。
我正在遵循我在IBM http://www.ibm.com/developerworks/linux/tutorials/l-glib/section5.html网上找到的教程,但是似乎找不到使用浮点数作为键的方法。
任何帮助将非常感谢!
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
最佳答案
您的代码对我来说看起来是正确的,除了打印出键值的例程。我认为您的意思是,它将每个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);
关于c - 将浮点数存储为GhashTable中的键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25526740/