1

データを保存するために(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"!!!

私は何が間違っているのですか?ありがとうございました。

4

2 に答える 2

1

これは、等式が比較と同じではないため、等しいかどうかだけでなく、2つのキーの順序(つまり、辞書の順序)g_tree_new提供する関数が必要だからです。

于 2010-03-23T06:15:35.173 に答える
0

私は解決策を見つけたと思います。問題は次のとおりです。

tree = g_tree_new( g_str_equal );

公式チュートリアルによると、これはデフォルトのGCompareFuncの1つであるため、使用することにしました(ちなみに、GHashTableで問題なく使用できました)。しかし、それは問題です。正しい初期化は次のとおりです。

tree = g_tree_new((GCompareFunc)g_ascii_strcasecmp);

そして出来上がり!できます!IBMチュートリアルに感謝します。

于 2010-03-23T06:08:11.613 に答える