为什么不增加?

时间:2018-03-31 14:05:16

标签: c search data-structures glib

所以我试图做一个函数,GTree* a Tree的每个节点都是struct User)和id,它会搜索那个user并增加一个变量! (学校项目)

在这里得到了一些帮助,我设法做了,但我没有意识到它没有增加。

结构是:

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

typedef struct TCD_community{
    GTree* res;    
    GTree* quest; 
    GTree* users; /
}TCD_community;

typedef struct TCD_community * TAD_community;

TAD_community tq;

函数是(由stackoverflow用户帮助):

void incrementaPost(GTree* a,int id){

    gpointer ptr = g_tree_lookup ( a , &id);   

    struct user *u = (struct user *) ptr; 

    if(u){
        u->post_count++;  
    }
}

我在主要上打电话给:

incrementaPost( tq -> users, 703994);

输出:

Id 703994 
Name N.Sinha 
post_count 0 
reputation 51

预期:

Id 703994 
Name N.Sinha 
post_count 1 
reputation 51

1 个答案:

答案 0 :(得分:1)

请注意,在您进行搜索之前,必须正确构建GTree*

首先使用专用搜索功能构建树:

GTree   *tree;
tree = g_tree_new(MySearchFunction);

其中

  

g_tree_new ()

     

GTree * g_tree_new (GCompareFunc key_compare_func);

     

创建新的GTree

     

参数:

     

key_compare_func

     

用于对GTree中的节点进行排序的函数。它应该回来   类似于标准strcmp()函数的值 - 如果是0则为g_tree_insert ()   参数相等,如果第一个参数出现则为负值   在第二个之前,如果第一个参数出现,则为正值   在第二个之后。

然后必须使用g_tree_insert ()

插入您的对象
  

void g_tree_insert (GTree *tree, gpointer key, gpointer value);

     

GTree

     

将键/值对插入GTree

     

如果给定的密钥已存在于GTree其对应的值中   设置为新值。如果你提供了value_destroy_func   创建GTree时,使用该函数释放旧值。如果   你在创建tree时提供了key_destroy_func,传递了   使用该函数释放密钥。

     

参数

     

GTree

     
      
  • a key
  •   
     

value

     
      
  • 要插入的键
  •   
     

g_tree_lookup

     
      
  • 与键对应的值
  •   

只有这样,您才能使用GTree*进行搜索。

Check this simple example - 如何构建g_tree_lookup,插入元素,通过g_tree_traverse进行搜索,并通过DownloadManager遍历树。