g_tree_insert перезаписывает все данные - PullRequest
1 голос
/ 23 марта 2010

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

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

Ответы [ 2 ]

1 голос
/ 23 марта 2010

Дело в том, что равенство - это не то же самое, что сравнение, g_tree_new нужна функция, которая дает вам порядок двух ключей (т. Е. Словарный порядок), а не только то, равны они или нет.

0 голосов
/ 23 марта 2010

Я думаю, что нашел решение.Проблема была в:

tree = g_tree_new( g_str_equal );

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

tree = g_tree_new((GCompareFunc)g_ascii_strcasecmp);

И вуаля!Оно работает!Спасибо учебникам IBM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...