0


0

Glibハッシュテーブルの置換

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

どんな考えでもそれを理解するでしょう。

2 Answer


1


g_hash_table_replace?を見ましたか?

insertと同じ引数を取るように見えます。 +検索呼び出しはgpointerを返します。 結果をguintにキャストし、インクリメントし、インクリメントされた値でreplaceを呼び出します。


0


g_hash_table_replace(table, my_struct.key, v + 1)

ただし、構造体に一致させるには、vは `char *`ではなく `guint`である必要があります。

ただし、整数はポインタに収まることが保証されていないため、実行しているキャストはお勧めできません。 次のようなことをした方が良いでしょう:

 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
}