Domanda

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.

È stato utile?

Soluzione

Ecco perché l'uguaglianza non è lo stesso di confronto, g_tree_new ha bisogno di una funzione che ti dà l'ordine di di due tasti (vale a dire l'ordine dizionario), non solo se sono uguali oppure no.

Altri suggerimenti

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top