g_tree_insert перезаписывает все данные
-
21-09-2019 - |
Вопрос
Интересно, как мне использовать GTree (из GLib) для хранения данных?Каждое новое значение, которое я вставляю в 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"!!!
Что я делаю не так?Спасибо.
Решение
Это потому, что равенство — это не то же самое, что сравнение. g_tree_new
нужна функция, которая дает вам заказ из двух ключей (т.е.порядок словаря), а не только то, равны они или нет.
Другие советы
Думаю, я нашел решение.Проблема была в:
tree = g_tree_new( g_str_equal );
В официальном руководстве сказано, что это одна из функций GCompareFunc по умолчанию, поэтому я решил использовать ее (кстати, я успешно и без проблем использую ее в GHashTable).Но это беда.Правильная инициализация:
tree = g_tree_new((GCompareFunc)g_ascii_strcasecmp);
И вуаля!Оно работает!Спасибо учебным пособиям IBM.
Не связан с StackOverflow