g_tree_insert सभी डेटा अधिलेखित कर देता है

वोट
1

मुझे आश्चर्य है कि कैसे मैं (GLib से) GTree डाटा स्टोर करने इस्तेमाल करना चाहिए? हर नया मूल्य मैं g_tree_insert दिनचर्या के साथ GTree में डालने पिछले एक के ऊपर लिख रहा है!

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);

और देखा! यह काम करता हैं! आईबीएम ट्यूटोरियल के लिए Thanx।

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