سؤال

أتساءل كيف يجب أن أستخدم 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