所以我试着做一个函数,取aGTree*
a(每个Tree
节点都是astruct User
)和aid
,它会搜索这个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
最佳答案
请注意,必须正确构造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
,使用该函数释放旧值。如果您在创建
GTree
时提供了一个key_destroy_函数,通过使用该函数释放键。
参数
tree
a
GTree
key
插入的键
value
与键对应的值
只有这样,才能使用
g_tree_lookup
进行搜索。Check this simple example-如何构造
GTree*
,插入元素,通过g_tree_lookup
进行搜索,并通过g_tree_traverse
遍历树。关于c - 为什么不增加?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49588612/