📅  最后修改于: 2023-12-03 15:37:31.652000             🧑  作者: Mango
在 C++ 中,标准库提供了一个 sort 函数,可以对容器进行排序,而且该函数可以接受一个自定义函数作为参数,从而实现根据不同的规则进行排序。本文将介绍如何在 sort 函数中传递自定义函数。
在介绍 sort 函数如何传递自定义函数之前,先简单介绍一下 sort 函数的基本用法。
sort 函数属于算法库,所以需要包含头文件 <algorithm>
,同时 sort 函数接受两个迭代器,分别表示容器的起始和结束位置。
#include <algorithm>
#include <vector>
int main() {
std::vector<int> nums{ 5, 2, 7, 1, 9 };
std::sort(nums.begin(), nums.end()); // 默认从小到大排序
return 0;
}
在上述代码中,sort 函数默认从小到大排序。
现在假设我们想要按照字符串的长度从小到大排序,那么我们需要自定义一个排序函数,并将该函数作为 sort 函数的参数。
该自定义排序函数以指针方式传递给 sort,指针类型为一个函数,它需要两个参数,返回类型为 bool。
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
bool compare(std::string* s1, std::string* s2) {
return s1->length() < s2->length();
}
int main() {
std::vector<std::string> strs{ "hello", "world", "cpp", "sort" };
std::vector<std::string*> pstrs;
for (auto& str : strs) {
pstrs.push_back(&str);
}
std::sort(pstrs.begin(), pstrs.end(), compare);
for (auto& pstr : pstrs) {
std::cout << *pstr << std::endl;
}
return 0;
}
上述代码中,自定义的 compare 函数以指针方式传递给 sort。
本文介绍了如何自定义排序函数并在 sort 函数中传递。此功能可用于根据自定义规则对容器进行排序。