g_tree_insert überschreibt alle Daten

stimmen
1

Ich frage mich, wie ich die GTree verwenden soll (von Glib) Daten zu speichern? Jeder neue Wert, den ich mit g_tree_insert Routine in GTree einzufügen ist die vorherige überschreiben!

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

Was mache ich falsch? Vielen Dank.

Veröffentlicht am 23/03/2010 um 06:50
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
0

Ich denke, dass ich eine Lösung gefunden. Das Problem war, in der:

tree = g_tree_new( g_str_equal );

Die offiziellen Tutorial sagten es die eine des Standard GCompareFunc der ist, so habe ich beschlossen, es zu benutzen (übrigens, ich habe es successfuly ohne Probleme in der GHashTable verwenden). Aber es ist die Mühe. Die korrekte Initialisierung ist:

tree = g_tree_new((GCompareFunc)g_ascii_strcasecmp);

Und voila! Es klappt! Thanx zu IBM Tutorials.

Beantwortet am 23/03/2010 um 07:08
quelle vom benutzer

stimmen
1

Das ist , weil die Gleichheit nicht das gleiche wie Vergleich ist, g_tree_newbraucht eine Funktion , die Ihnen ermöglicht , um von zwei Tasten (dh Wörterbuch Reihenfolge), nicht nur , ob sie gleich sind oder nicht.

Beantwortet am 23/03/2010 um 07:15
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more