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

概述

函数作排序规则

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

#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的第三个参数时,一定牢记需要加()号。

#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 的自定义排序规则函数作排序规则仿函数作排序规则所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部