g_tree_insert écrase toutes les données

voix
1

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 écraser le précédent!

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? Je vous remercie.

Créé 23/03/2010 à 06:50
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
0

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.

Créé 23/03/2010 à 07:08
source utilisateur

voix
1

En effet , l' égalité est pas la même chose que la comparaison, a g_tree_newbesoin d' une fonction qui vous donne l' ordre de deux touches ( par exemple de l' ordre de dictionnaire), non seulement si elles sont égales ou non.

Créé 23/03/2010 à 07:15
source utilisateur

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