所以我试图做一个函数,它接受 a GTree*
(每个节点Tree
都是 a struct User
)和 an 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++;
}
}
我在 main 上这样称呼它:
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
于其对应的值中,则将其设置为新值。如果您在创建 时提供了 value_destroy_funcGTree
,则使用该函数释放旧值。如果您在创建 时提供了 key_destroy_funcGTree
,则使用该函数释放传递的密钥。参数
tree
- 一种
GTree
key
- 要插入的键
value
- 键对应的值
只有这样,您才能g_tree_lookup
用于搜索。
检查这个简单的例子- 如何构造GTree*
、插入元素、通过 进行搜索g_tree_lookup
和遍历树g_tree_traverse
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句