g_tree_insert suprascrie toate datele

voturi
1

Mă întreb cum ar trebui să utilizeze GTree (de la GLib) pentru a stoca date? Fiecare valoare nouă am insera în GTree cu rutina g_tree_insert este suprascrie cel precedent!

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

ce fac greșit? Mulțumesc.

Întrebat 23/03/2010 la 06:50
sursa de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
0

Cred că am găsit o soluție. Problema a fost în:

tree = g_tree_new( g_str_equal );

Tutorialul oficial a declarat că este una dintre setările prestabilite ale GCompareFunc, așa că am decis să-l folosească (de altfel, am folosi cu succes în GHashTable cu nici o problema). Dar este problema. Inițializarea corectă este:

tree = g_tree_new((GCompareFunc)g_ascii_strcasecmp);

Și Voila! Functioneaza! Thanx la tutoriale IBM.

Publicat 23/03/2010 la 07:08
sursa de către utilizator

voturi
1

Asta pentru că egalitatea nu este același lucru ca și comparație, g_tree_neware nevoie de o funcție care vă oferă ordinul a două chei ( de exemplu , ordine de dicționar), nu doar dacă acestea sunt egale sau nu.

Publicat 23/03/2010 la 07:15
sursa de către utilizator

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