Вопрос

Интересно, как мне использовать 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top