我是靠谱客的博主 高挑枫叶,这篇文章主要介绍排序算法--sort 的自定义排序规则函数作排序规则仿函数作排序规则,现在分享给大家,希望可以做个参考。

函数作排序规则

该函数以bool作为返回类型,函数参数是用以排序的两个元素,返回值的书写方式决定其排序规则。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<iostream> using namespace std; #include<string> #include<vector> #include<algorithm> class person{ public: person(string name,int age){ this->name = name; this->age = age; } string name; int age; }; void Mprint(const person p){ cout<<"名字:"<<p.name<<" 年龄:"<<p.age<<endl; } bool Mcmp(const person p1,const person p2){ return p1.age>p2.age; } int main(){ vector<person>p; person p1("唐生",10); person p2("沙僧",600); person p3("孙悟空",999); person p4("猪八戒",890); p.push_back(p1); p.push_back(p2); p.push_back(p3); p.push_back(p4); sort(p.begin(),p.end(),Mcmp); for_each(p.begin(),p.end(),Mprint); return 0; }

举个例子,在上述Mprint函数中,p1.age>p2.age的含义是:第一个元素的年龄需要大于第二个元素的年龄才为真,即对元素的年龄做降序处理。需要注意的是,不能写==号,否则会出错。

仿函数作排序规则

先定义一个类,在类里面定义operator函数,函数右边第一个括号表示这是一个仿函数,第二个括号表示需要排序的元素,返回值类型为bool,其余步骤与函数作为排序规则相同。注意,仿函数作为sort的第三个参数时,一定牢记需要加()号。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include<iostream> using namespace std; #include<string> #include<vector> #include<algorithm> class person{ public: person(string name,int age){ this->name = name; this->age = age; } string name; int age; }; void Mprint(const person p){ cout<<"名字:"<<p.name<<" 年龄:"<<p.age<<endl; } class Greater{ public: bool operator()(const person p1,const person p2){ return p1.age>p2.age; } }; int main(){ vector<person>p; person p1("唐生",10); person p2("沙僧",600); person p3("孙悟空",999); person p4("猪八戒",890); p.push_back(p1); p.push_back(p2); p.push_back(p3); p.push_back(p4); sort(p.begin(),p.end(),Greater()); for_each(p.begin(),p.end(),Mprint); return 0; }

最后

以上就是高挑枫叶最近收集整理的关于排序算法--sort 的自定义排序规则函数作排序规则仿函数作排序规则的全部内容,更多相关排序算法--sort内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部