2

我有一个结构数组,我想在结构数组中找到一个整数键。我的结构如下所示:

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()总是返回 NULL 不知道为什么。我怀疑我的比较功能是问题所在,但它看起来像这样:

int cmpArea(const void *a, const void *b){

    pair * pairA = (pair*)a;
    pair * pairB = (pair*)b;

    return (pairA->area - pairB->area);
} 

我尝试了不同的比较功能,但没有一个有效。我对你的想法持开放态度。谢谢你。

4

1 回答 1

0

在您的代码中,您指向的是一个键值,而不是一个实际的成员对象。

调用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);
} 
于 2019-12-01T21:45:47.853 回答