g_tree_insert sovrascrive tutti i dati

voti
1

Mi chiedo come dovrei usare il GTree (da GLib) per memorizzare i dati? Ogni nuovo valore inserisco in GTree con la routine g_tree_insert è sovrascrivere quello precedente!

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

Che cosa sto facendo di sbagliato? Grazie.

È pubblicato 23/03/2010 alle 04:50
fonte dall'utente
In altre lingue...                            


2 risposte

voti
0

Credo di avere trovato una soluzione. Il problema era in:

tree = g_tree_new( g_str_equal );

Il tutorial ufficiale ha detto che è l'uno dei predefiniti GCompareFunc di, così ho deciso di usarlo (a proposito, io con successo lo uso nel GHashTable senza alcun problema). Ma è il guaio. L'inizializzazione corretta è:

tree = g_tree_new((GCompareFunc)g_ascii_strcasecmp);

E voilà! Funziona! Grazie a tutorial IBM.

Risposto il 23/03/2010 a 05:08
fonte dall'utente

voti
1

Questo perché l'eguaglianza non è la stessa di confronto, g_tree_newha bisogno di una funzione che ti dà l' ordine di due tasti (cioè ordine dizionario), non solo se sono uguali oppure no.

Risposto il 23/03/2010 a 05:15
fonte dall'utente

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