所以我试图做一个函数,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
答案 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
遍历树。