g_tree_insert nadpisuje wszystkie dane

głosy
1

Zastanawiam się, w jaki sposób należy korzystać z GTree (od GLib) do przechowywania danych? Każda nowa wartość wstawić do GTree z g_tree_insert rutyny jest nadpisać poprzednią!

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

Co ja robię źle? Dziękuję Ci.

Utwórz 23/03/2010 o 06:50
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
0

Myślę, że znalazłem rozwiązanie. Problem był w:

tree = g_tree_new( g_str_equal );

Oficjalny poradnik powiedział, że to jest jeden z domyślnych GCompareFunc, więc postanowiłem go używać (nawiasem mówiąc, ja z powodzeniem używać go w GHashTable bez problemu). Ale jest problem. Prawidłowe inicjalizacji jest:

tree = g_tree_new((GCompareFunc)g_ascii_strcasecmp);

I voila! To działa! Thanx do tutoriali IBM.

Odpowiedział 23/03/2010 o 07:08
źródło użytkownik

głosy
1

To dlatego, że równość nie jest taka sama jak porównania, g_tree_newpotrzebuje funkcji, który daje rozkaz dwóch przycisków (tj rzędu słownika), a nie tylko tego, czy są one równe lub nie.

Odpowiedział 23/03/2010 o 07:15
źródło użytkownik

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