如何在Gtree(glib)上搜索元素?

时间:2018-03-30 17:41:13

标签: c data-structures glib

所以我有一个Gtree,每个节点都是一个结构:

typedef struct user {
    int id;
    char username[256]; 
    int post_count; 
    char short_bio[16384]; 
    int reputation;
}*USER;

一个GTree:

GTree* users;

我现在要做的是,一旦我有ID我想在我的Gtree* users上搜索,看看是否有与我通过的ID相同的用户,如果有,我想增加post_count变量并停止搜索。

示例:

I pass to the function id=3 and it searches on the GTree for 
a User with id=3 and increments 1 on post_count, using GLIB; 

void increment (GTree* a,int id);

1 个答案:

答案 0 :(得分:1)

根据文档看起来g_tree_lookup是您需要的功能。它会根据传递的gconstpointer key

找到一个值
g_tree_lookup ()
gpointer
g_tree_lookup (GTree *tree,
               gconstpointer key);
     

获取与给定键对应的值。因为GTree是   在添加键/值对时自动平衡,键查找是   O(log n)(其中n是树中键/值对的数量)。

代码类似于:

  void increment (GTree* a, int id)
  {
      gpointer ptr = g_tree_lookup (a,  &id);   // search the tree and find the value

      struct user *u = (struct user *) ptr; // cast the `gpointer ` to your pointer to your value 

      if(u){
          u->post_count++;  // increment the post_count
      }
  }

请告诉我这是否适合您。