g_tree_insert overskriver alle data

stemmer
1

Jeg lurer på hvordan jeg skal bruke den GTree (fra Glib) til å lagre data? Hver ny verdi jeg setter inn GTree med g_tree_insert rutine er overskrive den forrige!

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

Hva gjør jeg galt? Takk skal du ha.

Publisert på 23/03/2010 klokken 05:50
kilden bruker
På andre språk...                            


2 svar

stemmer
0

Jeg tror jeg har funnet en løsning. Problemet var i:

tree = g_tree_new( g_str_equal );

Den offisielle opplæringen sa det er en av standard GCompareFunc-tallet, så jeg bestemte meg for å bruke det (forresten, jeg successfuly bruke det i GHashTable uten problem). Men det er bryet. Den korrekte initialisering er:

tree = g_tree_new((GCompareFunc)g_ascii_strcasecmp);

Og voila! Det fungerer! Thanx til IBM tutorials.

Svarte 23/03/2010 kl. 06:08
kilden bruker

stemmer
1

Det er fordi likestilling er ikke det samme som sammenligning, g_tree_newtrenger en funksjon som gir deg rekkefølgen av to taster (dvs. ordboken rekkefølge), ikke bare om de er like eller ikke.

Svarte 23/03/2010 kl. 06:15
kilden bruker

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