g_tree_insert felülírja az összes adatot

szavazat
1

Kíváncsi vagyok, hogyan kéne használni a GTree (az GLib) tárolja az adatokat? Minden új érték azt beilleszteni GTree a g_tree_insert rutin felülírja az előzőt!

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

Mit csinálok rosszul? Köszönöm.

A kérdést 23/03/2010 06:50
a forrás felhasználó
Más nyelveken...                            


2 válasz

szavazat
0

Azt hiszem, megtaláltam a megoldást. A probléma az volt a:

tree = g_tree_new( g_str_equal );

A hivatalos bemutató azt mondta, hogy az egyik alapértelmezett GCompareFunc t, ezért úgy döntöttem, hogy használja (by the way, én sikeresen használni a GHashTable gond nélkül). De ez a baj. A helyes inicializálás:

tree = g_tree_new((GCompareFunc)g_ascii_strcasecmp);

És íme! Működik! Thanx az IBM oktató.

Válaszolt 23/03/2010 07:08
a forrás felhasználó

szavazat
1

Ennek oka, hogy az egyenlőség nem ugyanaz, mint összehasonlítás, g_tree_newszüksége van egy függvény, amely megadja a sorrendben a két kulcs (azaz szótár sorrendben), és nem csak, hogy egyenlőek vagy sem.

Válaszolt 23/03/2010 07:15
a forrás felhasználó

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