g_tree_insertは、すべてのデータが上書きされます
-
21-09-2019 - |
質問
私は、データを格納する(GLibのから)GTreeを使用すべきか疑問?私は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"!!!
何が私が間違っているのでしょうか?ありがとうございます。
解決
平等を比較と同じではないためです。
は、g_tree_new
は、次の2つのキー(すなわち、辞書順)ののための、だけでなく、それらが等しいか否かを与える機能を必要とします。
他のヒント
私は解決策を見つけたと思います。問題がでました。
tree = g_tree_new( g_str_equal );
公式のチュートリアルでは、私が(ちなみに、私はsuccessfuly問題なくGHashTableでそれを使用)、それを使用することにしましたので、それは、デフォルトGCompareFuncのの一つであると述べました。しかし、それは面倒です。正しい初期化があります:
tree = g_tree_new((GCompareFunc)g_ascii_strcasecmp);
出来上がり!できます! IBMのチュートリアルにありがとうます。
所属していません StackOverflow