Pergunta

Gostaria de saber como devo usar o GTree (do Glib) para armazenar dados? Todo novo valor que insiro no GTree com a rotina G_Tree_Insert é sobrescrever o anterior!

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

O que estou fazendo errado? Obrigada.

Foi útil?

Solução

Isso porque a igualdade não é a mesma que comparação, g_tree_new precisa de uma função que lhe dê o ordem de duas chaves (ou seja, ordem do dicionário), não apenas se são iguais ou não.

Outras dicas

Eu acho que encontrei uma solução. O problema estava no:

tree = g_tree_new( g_str_equal );

O tutorial oficial disse que é o dos GCompareFunc padrão, então eu decidi usá -lo (a propósito, eu bem -sucedido o uso no ghashtable sem nenhum problema). Mas é o problema. A inicialização correta é:

tree = g_tree_new((GCompareFunc)g_ascii_strcasecmp);

E pronto! Funciona! Obrigado aos tutoriais da IBM.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top