我想知道如何使用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"!!!
我做错了什么?谢谢。
答案 0 :(得分:1)
那是因为平等与比较不同,g_tree_new
需要一个函数,它给你两个键的 order (即字典顺序),而不仅仅是它们是否相等。
答案 1 :(得分:0)
我想我找到了解决方案。问题在于:
tree = g_tree_new( g_str_equal );
官方教程说它是默认的GCompareFunc之一,所以我决定使用它(顺便说一句,我成功地在GHashTable中使用它没有问题)。但这是麻烦。正确的初始化是:
tree = g_tree_new((GCompareFunc)g_ascii_strcasecmp);
瞧!有用! Thanx到IBM教程。