2016-10-04 6 views
0

Я использую Glib для хеш-таблицы. Мне нужно обновить значение из ключа. Есть ли способ без удаления и вставить в хеш-таблицу для обновления.Значение обновления таблицы хэша в c

Я нашел g_hash_table_replace()

gboolean 
g_hash_table_replace (GHashTable *hash_table, 
         gpointer key, 
         gpointer value); 

Является ли это значение обновление от ключа, если это, как я могу использовать эту функцию.

Решите:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <unistd.h> 
#include <signal.h> 
#include <glib.h> 

GHashTable * hash_operation = NULL; 
int main(int argc, char *argv[]) { 
char *from; 
int gg = 3; 
char *a=strdup("32"),*b=strdup("24"),*c=("mübarek"); 

hash_operation = g_hash_table_new(g_str_hash, g_str_equal); 
g_hash_table_insert(hash_operation, a, gg); 

from = strdup(g_hash_table_lookup(hash_operation, a)); 
printf("%s\n",from); 
g_hash_table_replace (hash_operation, a,c); 
from = strdup(g_hash_table_lookup(hash_operation, a)); 
printf("%s\n",from); 
free(a); 
free(b); 
free(c); 
free(from); 

return 0; 
} 

Проблема решена.

+0

Что именно ваша проблема? Например, почему вы не можете использовать эту функцию (пожалуйста, покажите код, который вы пробовали)? Или эта функция непригодна, почему? – hyde

ответ

1

Использование функции g_hash_table_replace довольно легко:

Он принимает 3 аргумента:

  • hash_table: Это, конечно, вы Хеш, поэтому в вашем случае hash_operation
  • key: Ключ вы хотите отредактировать. (Я верю ваш ключ a)
  • value: Значение, которое должно быть сохранено в GHashTable на key

Быстрый пример будет:

GHashTable *table = g_hash_table_new(g_str_hash, g_str_equal); 
gchar *key = "key1"; 
g_hash_table_insert(table, key, "Hello"); 
g_hash_table_replace(table, key, "World"); 
gchar *result = (gchar*) g_hash_table_lookup(table, key); 
g_print("Result: %s\n", result); //Prints: "Result: World" 
+0

О, я пропустил слово 'решить' в вашем вопросе;) в любом случае ... – mame98