Значение обновления хэш-таблицы в c

#c #hash #key #glib

#c #хэш #Клавиша #glib

Вопрос:

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

Я нашел 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("%sn",from);
g_hash_table_replace (hash_operation, a,c);
from = strdup(g_hash_table_lookup(hash_operation, a));
printf("%sn",from);
free(a);
free(b);
free(c);
free(from);

return 0;
}
  

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

Комментарии:

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

Ответ №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: %sn", result); //Prints: "Result: World"