如何通过 C 中的结构变量对数组**进行排序?

How to sort an array** by a struct variable in C?

我最近一直在使用函数 qsort 对数组中的结构进行排序。我从 .csv 文件加载了一个数组**。我的结构看起来像这样。

typedef struct {
    int id;
    char regionName[25];
    char townName[25];
    int countOfMan;
    int countOfWoman;
} tTown;

我想按地区的女性数量对数组进行排序。我已经定义了比较函数并尝试对其进行排序。

int compareWomenCount(const tTown* village1, const tTown* village2) {
    int result = 0;
    if (village1->countOfWoman < village2->countOfWoman) {
        result = -1;
    }
    else if (village1->countOfWoman > village2->countOfWoman) {
        result = 1;
    }
    return result;
}

这是我的排序:

void sortArray(tTown** region, int arrayLength) {
    qsort(region, arrayLength, sizeof(tTown*), compareWomenCount);
}

但是没有用。有人知道该怎么办吗?

谢谢!

qsort 函数将指向数组中每个元素的指针传递给比较函数(基本上它在每个元素上使用寻址运算符 &,如 &region[i] ).

如果数组中的每个元素都是一个指针,那么传递的是一个指针到一个指针

这意味着您的比较函数需要类似于

int compareWomenCount(const tTown** village1, const tTown** village2) {
    int result = 0;
    if ((*village1)->countOfWoman < (*village2)->countOfWoman) {
        result = -1;
    }
    else if ((*village1)->countOfWoman > (*village2)->countOfWoman) {
        result = 1;
    }
    return result;
}

此外,排序函数的参数需要通用常量指针(const void *)才能真正正确,然后您应该将它们转换为函数内部的正确指针类型。