g_tree_insert přepíše všechna data

hlasů
1

Zajímalo by mě, jak bych měl použít GTree (od GLib) pro ukládání dat? Každá nová hodnota I vložit do GTree s g_tree_insert rutina je přepsat předchozí!

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 dělám špatně? Děkuji.

Položena 23/03/2010 v 06:50
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
0

Myslím, že jsem našel řešení. Problém byl v:

tree = g_tree_new( g_str_equal );

Oficiální výukový řekl, že je jedním z výchozích GCompareFunc let, tak jsem se rozhodl ji používat (mimochodem, jsem úspěšně použít v GHashTable bez problémů). Ale to je problém. Správná inicializace:

tree = g_tree_new((GCompareFunc)g_ascii_strcasecmp);

A voila! Funguje to! Poděkování IBM konzultace.

Odpovězeno 23/03/2010 v 07:08
zdroj uživatelem

hlasů
1

To proto, že rovnost není totéž jako srovnání, g_tree_newje třeba funkci, která vám umožní pořadí dvou kláves (tj slovník řádu), a to nejen, zda jsou stejné, nebo ne.

Odpovězeno 23/03/2010 v 07:15
zdroj uživatelem

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