Question

Je me demande comment je devrais utiliser le GTree (de GLib) pour stocker des données? Chaque nouvelle valeur insérer dans GTree avec la routine de g_tree_insert est écrasera l'ancienne!

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

Qu'est-ce que je fais mal? Merci.

Était-ce utile?

La solution

C'est parce que l'égalité n'est pas la même que la comparaison, g_tree_new a besoin d'une fonction qui vous donne la pour de deux touches (à savoir de l'ordre du dictionnaire), non seulement si elles sont égales ou non.

Autres conseils

Je pense avoir trouvé une solution. Le problème était dans le:

tree = g_tree_new( g_str_equal );

Le tutoriel officiel a dit qu'il est l'un des défaut des années GCompareFunc, alors j'ai décidé de l'utiliser (en passant, je l'utilise avec succès dans le GHashTable sans problème). Mais il est la peine. L'initialisation correcte est:

tree = g_tree_new((GCompareFunc)g_ascii_strcasecmp);

Et le tour est joué! Ça marche! Thanx à des tutoriels IBM.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top