Frage

Ich frage mich, wie ich die GTree verwenden soll (von Glib) zum Speichern von Daten? 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? Danke.

War es hilfreich?

Lösung

Das ist, weil die Gleichheit nicht das gleiche wie Vergleich, g_tree_new eine Funktion benötigt, dass Sie die gibt, um von zwei Tasten (d Wörterbuch Reihenfolge), nicht nur, ob sie gleich sind oder nicht.

Andere Tipps

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 Standardwertes ist GCompareFunc sind, so dass ich es zu benutzen entschieden (ü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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top