g_tree_insert αντικαθιστά όλα τα δεδομένα

ψήφοι
1

Αναρωτιέμαι πώς θα πρέπει να χρησιμοποιούν το 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!!!

Τι κάνω λάθος? Ευχαριστώ.

Δημοσιεύθηκε 23/03/2010 στις 06:50
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
0

Νομίζω ότι βρήκα μια λύση. Το πρόβλημα ήταν το:

tree = g_tree_new( g_str_equal );

Η επίσημη σεμινάριο είπε ότι είναι η μία από τις προεπιλεγμένες GCompareFunc του, γι 'αυτό αποφάσισε να το χρησιμοποιήσει (από τον τρόπο, που με επιτυχία το χρησιμοποιούν στην GHashTable χωρίς πρόβλημα). Αλλά είναι το πρόβλημα. Η σωστή αρχικοποίησης είναι:

tree = g_tree_new((GCompareFunc)g_ascii_strcasecmp);

Και ιδού! Δουλεύει! Ευχαριστώ για τα σεμινάρια της 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