g_tree_insert sobrescribe todos los datos

votos
1

Me pregunto cómo debo utilizar el GTree (de GLib) para almacenar datos? Cada nuevo valor inserto en GTree con la rutina g_tree_insert es sobrescribir el anterior!

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é estoy haciendo mal? Gracias.

Publicado el 23/03/2010 a las 06:50
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
0

Creo que he encontrado una solución. El problema estaba en la:

tree = g_tree_new( g_str_equal );

El tutorial oficial dijo que es la de la década de GCompareFunc por defecto, por lo que decidió utilizarlo (por cierto, yo utilizo con exito en el GHashTable sin ningún problema). Pero es el problema. La inicialización correcta es:

tree = g_tree_new((GCompareFunc)g_ascii_strcasecmp);

¡Y voilá! ¡Funciona! Gracias a los tutoriales de IBM.

Respondida el 23/03/2010 a las 07:08
fuente por usuario

votos
1

Esto se debe a la igualdad no es la misma que la comparación, g_tree_newnecesita una función que le da la orden de dos llaves (es decir, orden del diccionario), no sólo si son iguales o no.

Respondida el 23/03/2010 a las 07:15
fuente por usuario

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