1

我想知道我应该如何使用 GTree(来自 GLib)来存储数据?我使用 g_tree_insert 例程插入 GTree 的每个新值都会覆盖前一个值!

GTree *tree; //init
tree = g_tree_new( g_str_equal ); //"g_str_equal" is a GLib default compare func
//...
for( i = 0; i < 100; ++i )
    g_tree_insert( tree, random_key(), random_value() ); //insert some random vals
//
printf( "%d", g_tree_nnodes( tree ) ); //should be 100? NO! Prints "1"!!!

我究竟做错了什么?谢谢你。

4

2 回答 2

1

那是因为相等与比较不同,g_tree_new需要一个函数来为您提供两个键的顺序(即字典顺序),而不仅仅是它们是否相等。

于 2010-03-23T06:15:35.173 回答
0

我想我找到了解决办法。问题出在:

tree = g_tree_new( g_str_equal );

官方教程说它是默认的 GCompareFunc 之一,所以我决定使用它(顺便说一下,我在 GHashTable 中成功使用它没有问题)。但这就是麻烦。正确的初始化是:

tree = g_tree_new((GCompareFunc)g_ascii_strcasecmp);

瞧!有用!感谢 IBM 教程。

于 2010-03-23T06:08:11.613 回答