g_tree_insert перезаписывает все данные

голоса
1

Интересно, как я должен использовать GTree (от БОЙКОГО) для хранения данных? Каждое новое значение вставить в GTree с g_tree_insert рутиной перезаписать предыдущую!

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

Что я делаю не так? Спасибо.

Задан 23/03/2010 в 06:50
источник пользователем
На других языках...                            


2 ответов

голоса
0

Я думаю, я нашел решение. Проблема заключалась в:

tree = g_tree_new( g_str_equal );

Официальный учебник сказал, что это один из стандартных GCompareFunc-й лет, поэтому я решил использовать его (кстати, я успешно использовать его в GHashTable без проблем). Но это беда. Правильная инициализация:

tree = g_tree_new((GCompareFunc)g_ascii_strcasecmp);

И вуаля! Оно работает! Thanx для IBM учебники.

Ответил 23/03/2010 в 07:08
источник пользователем

голоса
1

Это потому , что равенство не является такой же , как сравнение, g_tree_newнужна функция , которая дает Вам заказ двух ключей (т.е. порядка словаря), не просто ли они равны или нет.

Ответил 23/03/2010 в 07:15
источник пользователем

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