在 C 中将 bsearch() 函数与结构数组一起使用
Using bsearch() function with array of structs in C
我有一个结构数组,我想在结构数组中找到一个整数键。
我的结构如下所示:
typedef struct{
int x;
int y;
int area;
int occurence;
}pair;
我想使用 bsearch()
在数组中找到特定的值,即面积。我有一个按 qsort()
升序排序的对数组。我的代码如下所示:
qsort(pairs, nPairs, sizeof(pair), cmpArea);
int * tmp = NULL, area = someValue;
tmp = (int *)bsearch(&area, pairs, nPairs, sizeof(pair), cmpArea);
if (tmp!=NULL)
//do something
else
//do something
//pairs is the name of the array, nPairs is number of elements
我尝试使用调试器查看这些值,bsearch()
总是 returns NULL 不知道为什么。我怀疑是我的比较函数有问题,但它看起来像这样:
int cmpArea(const void *a, const void *b){
pair * pairA = (pair*)a;
pair * pairB = (pair*)b;
return (pairA->area - pairB->area);
}
我尝试了不同的比较函数,但 none 有效。我对你的想法持开放态度。谢谢。
在您的代码中,您指向的是键值而不是实际的成员对象。
对bsearch
的调用应该更像这样:
pair key_obj;
pair *result;
key_obj.area = someValue;
result = bsearch(&key_obj, pairs, nPairs, sizeof(pair), cmpArea);
有人向我指出第一个 arg 可以指向一个 int *
如果编写比较器来处理它。在那种情况下,我们将有:
int key_obj = someValue;
pair *result;
result = bsearch(&key_obj, pairs, nPairs, sizeof(pair), cmpArea);
int cmpArea(const void *a, const void *b){
int *key = (int *)a;
pair * pairB = (pair*)b;
return (*key - pairB->area);
}
我有一个结构数组,我想在结构数组中找到一个整数键。 我的结构如下所示:
typedef struct{
int x;
int y;
int area;
int occurence;
}pair;
我想使用 bsearch()
在数组中找到特定的值,即面积。我有一个按 qsort()
升序排序的对数组。我的代码如下所示:
qsort(pairs, nPairs, sizeof(pair), cmpArea);
int * tmp = NULL, area = someValue;
tmp = (int *)bsearch(&area, pairs, nPairs, sizeof(pair), cmpArea);
if (tmp!=NULL)
//do something
else
//do something
//pairs is the name of the array, nPairs is number of elements
我尝试使用调试器查看这些值,bsearch()
总是 returns NULL 不知道为什么。我怀疑是我的比较函数有问题,但它看起来像这样:
int cmpArea(const void *a, const void *b){
pair * pairA = (pair*)a;
pair * pairB = (pair*)b;
return (pairA->area - pairB->area);
}
我尝试了不同的比较函数,但 none 有效。我对你的想法持开放态度。谢谢。
在您的代码中,您指向的是键值而不是实际的成员对象。
对bsearch
的调用应该更像这样:
pair key_obj;
pair *result;
key_obj.area = someValue;
result = bsearch(&key_obj, pairs, nPairs, sizeof(pair), cmpArea);
有人向我指出第一个 arg 可以指向一个 int *
如果编写比较器来处理它。在那种情况下,我们将有:
int key_obj = someValue;
pair *result;
result = bsearch(&key_obj, pairs, nPairs, sizeof(pair), cmpArea);
int cmpArea(const void *a, const void *b){
int *key = (int *)a;
pair * pairB = (pair*)b;
return (*key - pairB->area);
}