所以我有一个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);
答案 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
}
}
请告诉我这是否适合您。