c++自定义set的比较器
时间: 2023-11-06 13:07:14 浏览: 101
C# - 实现自定义相等比较器
在 C 语言中,可以使用 `qsort` 函数对一个数组进行排序。而 `qsort` 函数需要一个比较函数来确定元素之间的顺序。如果要对一个自定义结构体的数组进行排序,就需要自定义一个比较函数。
假设我们有一个结构体 `Person`,其中包含姓名和年龄两个成员变量:
```c
struct Person {
char name[20];
int age;
};
```
我们想要按照年龄从小到大对一个 `Person` 结构体数组进行排序。那么我们可以自定义一个比较函数如下:
```c
int cmp(const void* a, const void* b) {
const struct Person *pa = a;
const struct Person *pb = b;
if (pa->age < pb->age) {
return -1;
} else if (pa->age > pb->age) {
return 1;
} else {
return 0;
}
}
```
其中,`cmp` 函数的参数类型是 `const void*`,这是为了通用性考虑。在函数内部,我们需要将参数转换成 `Person*` 类型,这样才能访问结构体的成员变量。
比较函数的返回值为整型,表示两个元素之间的大小关系。如果返回值为负数,表示第一个元素小于第二个元素;如果返回值为正数,表示第一个元素大于第二个元素;如果返回值为零,表示两个元素相等。
最后,我们可以在主函数中调用 `qsort` 函数来对结构体数组进行排序:
```c
int main() {
struct Person people[] = {
{"Alice", 20},
{"Bob", 18},
{"Charlie", 25},
{"David", 18},
{"Emily", 22},
};
int n = sizeof(people) / sizeof(people[0]);
qsort(people, n, sizeof(struct Person), cmp);
for (int i = 0; i < n; i++) {
printf("%s %d\n", people[i].name, people[i].age);
}
return 0;
}
```
阅读全文