c++中的sort函数的自定义规则代码模板
时间: 2023-04-05 18:02:01 浏览: 104
以下是一个使用 sort 函数自定义规则的代码模板:
```
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) {
// 自定义比较规则
// 返回值为负数表示 a 在 b 前面
// 返回值为正数表示 a 在 b 后面
// 返回值为 0 表示 a 和 b 相等
}
int main() {
int arr[] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
int n = sizeof(arr) / sizeof(arr[0]);
qsort(arr, n, sizeof(int), compare);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
在这个模板中,我们使用了 qsort 函数来对一个整数数组进行排序。qsort 函数的第一个参数是待排序的数组,第二个参数是数组的长度,第三个参数是每个元素的大小,第四个参数是一个函数指针,指向一个自定义的比较函数。在 compare 函数中,我们可以根据自己的需要定义比较规则,例如按照从小到大的顺序排序。最后,我们遍历排序后的数组并输出结果。
相关问题
C++中sort函数解释,举例
C++ 标准库中的 `sort()` 函数是 `<algorithm>` 头文件的一部分,它是一个通用的排序算法模板,可用于对不同类型的容器(比如数组、向量、列表等)以及可以进行迭代的范围内的元素进行排序。`sort()` 函数的基本语法如下:
```cpp
template< class RandomIt >
void sort(RandomIt first, RandomIt last);
```
其中:
- `first` 是要排序序列的起始迭代器,
- `last` 是排序序列结束但不包括的迭代器。
例如,如果你想对一个整数数组进行升序排序,可以这样做:
```cpp
#include <iostream>
#include <algorithm>
int main() {
int arr[] = {5, 2, 8, 1, 9, 4};
int n = sizeof(arr) / sizeof(arr[0]);
std::sort(arr, arr + n); // 对数组进行排序
// 输出排序后的结果
for (int i = 0; i < n; ++i) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
return 0;
}
```
运行上述代码,输出将是:`1 2 4 5 8 9`。
对于自定义类型的比较,你可以通过提供一个二元谓词(binary predicate),比如一个 `bool` 类型的函数指针或lambda表达式来指定排序规则。例如,如果我们有一个 `Person` 类,可以根据年龄进行排序:
```cpp
class Person {
public:
std::string name;
int age;
//...
};
bool compareByAge(const Person &a, const Person &b) {
return a.age < b.age;
}
int main() {
std::vector<Person> people = {/* ... */}; // 假设已填充人及其年龄
std::sort(people.begin(), people.end(), compareByAge);
// ...
}
```
在这里,`compareByAge` 是一个比较函数,`sort()` 利用这个函数来确定元素的相对顺序。
阅读全文