如何通过 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
函数将指向数组中每个元素的指针传递给比较函数(基本上它在每个元素上使用寻址运算符 &
,如 ®ion[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 *
)才能真正正确,然后您应该将它们转换为函数内部的正确指针类型。
我最近一直在使用函数 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
函数将指向数组中每个元素的指针传递给比较函数(基本上它在每个元素上使用寻址运算符 &
,如 ®ion[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 *
)才能真正正确,然后您应该将它们转换为函数内部的正确指针类型。