g_tree_insert覆盖所有数据
-
21-09-2019 - |
题
我不知道如何应该使用(从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的教程。
不隶属于 StackOverflow