g_tree_insert overschrijft alle gegevens

stemmen
1

Ik vraag me af hoe ik de GTree (van GLib) om gegevens op te slaan zou moeten gebruiken? Elke nieuwe waarde I voegen in GTree met g_tree_insert routine is overschrijven de vorige!

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

Wat doe ik verkeerd? Dank je.

De vraag is gesteld op 23/03/2010 om 06:50
bron van user
In andere talen...                            


2 antwoorden

stemmen
0

Ik denk dat ik een oplossing gevonden. Het probleem was in de:

tree = g_tree_new( g_str_equal );

De officiële handleiding gezegd is het een van de standaard GCompareFunc's, dus heb ik besloten om het te gebruiken (door de manier, ik gebruik het met succes in de GHashTable met geen probleem). Maar het is de moeite. De juiste initialisatie is:

tree = g_tree_new((GCompareFunc)g_ascii_strcasecmp);

En voila! Het werkt! Thanx naar IBM tutorials.

antwoordde op 23/03/2010 om 07:08
bron van user

stemmen
1

Dat komt omdat gelijkheid is niet hetzelfde als vergelijking, g_tree_newheeft behoefte aan een functie die u het geeft orde van twee toetsen (dwz woordenboek volgorde), niet alleen of ze gelijk zijn of niet.

antwoordde op 23/03/2010 om 07:15
bron van user

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