当使用sort函数对序列进行排序时,要根据具体情况实现不同的比较函数,以便sort函数能够正确地排序。在C++中,sort默认使用std::less作为比较函数,用于比较两个元素的大小关系。如果需要自定义比较函数,需要重新实现一个函数作为sort的第三个参数传入。
比较函数需要满足以下条件:
1. 以两个参数为输入,返回一个bool类型的值,true表示第一个参数小于第二个参数,否则返回false。
2. 在比较函数中尽量不要修改参数的值,因为sort函数需要进行多次比较。
下面是自定义比较函数的两个示例:
示例1:按照字符串长度从小到大排序
#include <iostream>
#include <algorithm>
#include <vector>
bool cmp(const std::string& str1, const std::string& str2)
{
return str1.size() < str2.size();
}
int main()
{
std::vector<std::string> vec { "hello", "world", "this", "is", "a", "test" };
std::sort(vec.begin(), vec.end(), cmp);
for(auto& s : vec)
{
std::cout << s << " ";
}
return 0;
}
示例1中定义了一个比较函数cmp
,它的实现通过字符串长度来比较两个字符串的大小关系。sort函数会按照cmp函数的规则对vector中的元素进行排列。下面是输出结果:
a is test hello world this
示例2:按照学生的年龄从大到小排序
#include <iostream>
#include <algorithm>
#include <vector>
struct Student
{
std::string name;
int age;
};
bool cmp(const Student& s1, const Student& s2)
{
return s1.age > s2.age;
}
int main()
{
std::vector<Student> vec { {"Tom", 17}, {"Jerry", 20}, {"Bob", 18}, {"Lucy", 19} };
std::sort(vec.begin(), vec.end(), cmp);
for(auto& s : vec)
{
std::cout << s.name << " ";
}
return 0;
}
示例2中定义了一个结构体Student,其中包含学生的姓名和年龄两个成员变量。又定义了一个比较函数cmp
,它的实现是通过学生的年龄来比较两个学生的大小关系。sort函数会按照cmp函数的规则对vector中的元素进行排列。下面是输出结果:
Jerry Lucy Bob Tom
以上是自定义sort函数中的比较函数的详细讲解和两个示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:你知道如何自定义sort函数中的比较函数 - Python技术站