我正在使用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
任何想法都会受到赞赏。
答案 0 :(得分:1)
它似乎采用与插入相同的参数 查找调用返回一个gpointer。您需要将结果转换为guint,increment,然后使用递增的值调用replace。
答案 1 :(得分:0)
g_hash_table_replace(table, my_struct.key, v + 1)
但是,为了匹配您的结构,v应该是guint
,而不是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
}