c - 将非 pod 结构插入 GHashTable

标签 c struct hashtable glib

我正在尝试构建一个包含 int、time_t 和一些 char* 的结构实例的 GHashTable。

我的问题是,如何将结构体实例插入 GHashTable 中?有很多关于如何插入字符串或整数的示例(分别使用 g_str_hash 和 g_int_hash),但我猜测我想使用 g_direct_hash,但我似乎找不到任何示例。

理想情况下,我的代码如下所示:

GHashtable table;
table = g_hash_table_new(g_direct_hash, g_direct_equal);
struct mystruct;
mystruct.a = 1;
mystruct.b = "hello";
mystruct.c = 5;
mystruct.d = "test";

g_hash_table_insert(table,mystruct.a,mystruct);

显然,这是不正确的,因为它无法编译。任何人都可以提供一个可以实现我想要的功能的示例吗? 谢谢, 瑞克

最佳答案

您不能插入自动变量;您必须为要以动态方式存储的数据分配内存,即使用 g_malloc()或同等水平。

然后您需要找出一种方法来根据数据计算哈希值,以帮助表提高效率。使用g_direct_hash()这里不太好;它将使用指向您数据的指针作为哈希值。

好像你想使用成员(member)a以你的结构为关键;这个字段是什么类型?如果是整数,可以使用 <a href="http://g_int_hash" rel="noreferrer noopener nofollow">g_int_hash()</a> .

我认为这更符合您的实际代码应该是什么样子:

GHashtable *table;
struct mystruct *my;

table = g_hash_table_new_full(g_int_hash, g_int_equal, NULL, g_free);
my = g_malloc(sizeof *my);
my->a = 1;
my->b = "hello";
my->c = 5;
my->d = "test";

g_hash_table_insert(table, GINT_TO_POINTER(my->a), my);

请注意,这假设 bd成员只是字符指针,因为没有为字符串动态分配存储空间。

关于c - 将非 pod 结构插入 GHashTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2666625/

相关文章:

c++ - 将指向结构的指针转换为指向该结构的唯一成员的指针

在 C 中创建结构数组

hashtable - 哈希表问题

c - 链表无限循环问题

c - 这个 C 程序输出垃圾

c++ - 如何在 C++ 中使用来自 dll 的结构?

c - Linux 中另一个进程的重复文件描述符(没有 sendmsg)

c - 了解哈希表

c - 运行简单的字符串 C 程序时出现总线错误

c - 逐列将字符串打印为矩阵格式