0

我正在使用 GLib 哈希表。我试图获取我找到的键的当前值,然后增加它的值。我不太确定如何替换现有值。

 typedef struct {
   gchar *key;
   guint my_int;
 } my_struct;

char *v;
v = g_hash_table_lookup(table, my_struct.key);
if (v == NULL) 
   g_hash_table_insert(table, g_strdup(my_struct.key), (gpointer)(my_struct.my_int));
else 
   g_hash_table_replace() // here I'd like to do something like current_val+1

任何想法将不胜感激。

4

2 回答 2

1

你看过g_hash_table_replace 吗?

它似乎采用与插入相同的参数。
查找调用会返回一个 gpointer。您需要将结果转换为 guint、增量,然后使用增量值调用替换。

于 2010-02-16T03:26:59.070 回答
0
g_hash_table_replace(table, my_struct.key, v + 1)

但是,为了匹配您的结构, v 应该是 a guint,而不是 a char *

但请注意,您正在做的转换不是一个好主意,因为整数不能保证适合指针。最好执行以下操作:

 typedef struct {
   gchar *key;
   guint *my_int;
 } my_struct;

guint *v;
v = (guint*) g_hash_table_lookup(table, my_struct.key);
if (v == NULL) 
{
   my_struct.my_int = g_malloc(sizeof(guint));
   *(my_struct.my_int) = 0;
   g_hash_table_insert(table, my_struct.key, my_struct.my_int);
}
else 
{
   (*v)++;
   g_hash_table_replace(table, my_struct.key, v) // here I'd like to do something like current_val+1
}
于 2010-02-16T03:39:19.540 回答