我不知道如何应该使用(从GLib的)的GTree存储数据?每一个新的价值我插入GTree与g_tree_insert例程是覆盖前一个!

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"!!!

我在做什么错?谢谢你。

有帮助吗?

解决方案

这是因为平等是不一样的比较,需要g_tree_new的功能,让你的顺序的两个键(即字典顺序)的,而不仅仅是它们是否相等。

其他提示

我想我找到一个解决方案。问题是在:

tree = g_tree_new( g_str_equal );

该负责人说教程它是默认GCompareFunc的的一个,所以我决定用它(顺便说一下,我successfuly在GHashTable没有问题,使用它)。但它的麻烦。正确的初始化是:

tree = g_tree_new((GCompareFunc)g_ascii_strcasecmp);

和瞧!有用!感谢名单给IBM的教程。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top