g_tree_insert sobrescribe todos los datos
-
21-09-2019 - |
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.
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.