Pregunta

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.

¿Fue útil?

Solución

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

Otros consejos

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 del defecto de GCompareFunc, así que decidí 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 listo! ¡Funciona! Gracias a los tutoriales de IBM.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top