C++复习笔记--自定义比较器的使用(仿函数实现)

目录

1--比较器的优点

2--比较器的规则

3--代码实例


1--比较器的优点

比较器的实质是重载比较运算符;

比较器可以很好地应用在特殊标准的排序中;

比较器可以很好地应用在根据特殊标准排序的结构上;

2--比较器的规则

一开始参数的前后顺序与函数传入参数的前后顺序一致,即对于 function(T v1, T v2) 的初始顺序是 v1 在前面,v2 在后面,根据排序规则确定是否交换顺序;

返回正数(true)的时候,不交换顺序(第一个参数在前面);

返回负数(false)的时候,交换顺序(第一个参数在后面);

3--代码实例

cpp 复制代码
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

class Person{
public:
    Person(std::string n, int a, int s) : age(a),  name(n), score(s) {};
    std::string name;
    int age;
    int score;
};

class Compare1{
public:
    bool operator()(Person v1, Person v2){
        // 按照年龄降序排列
        return v1.age > v2.age; // 返回 true 时, v1 在前面 
    }
};

class Compare2{
public:
    bool operator()(Person v1, Person v2){
        // 按照成绩升序排列
        return v1.score < v2.score; // 返回 true 时, v1 在前面 
    }
};

int main(int argc, char *argv[]){
    Person p1("zhangsan", 23, 95);
    Person p2("lisi", 22, 99);
    Person p3("wangwu", 21, 97);

    std::vector<Person> P = {p1, p2, p3};

    // 按照年龄降序排列
    std::sort(P.begin(), P.end(), Compare1());
    for(Person p : P) std::cout << p.name << " " << p.age << " " << p.score << std::endl;
    std::cout << "-----------" << std::endl;

    // 按照成绩升序排列
    std::sort(P.begin(), P.end(), Compare2());
    for(Person p : P) std::cout << p.name << " " << p.age << " " << p.score << std::endl;

    return 0;
}
cpp 复制代码
// 运行结果
zhangsan 23 95
lisi 22 99
wangwu 21 97
-----------
zhangsan 23 95
wangwu 21 97
lisi 22 99
相关推荐
邪修king22 分钟前
Re:Linux 系统篇(十七):进程篇(六):环境变量深度解析|命令行参数、环境变量表、4 种获取方式与继承机制万字详解
linux·服务器·c++
张小姐的猫1 小时前
【C++开发脚手架】 —— Jsoncpp上手
java·linux·开发语言·网络·c++·tcp/ip·udp
OPEN-F1 小时前
C++并发编程:异步任务与线程池实战
开发语言·c++·算法
水饺编程2 小时前
第5章,[Win32 章节] :练习程序,BigFontPic
c语言·c++·windows·visual studio
恋恋西风10 小时前
C++ 理解 std::thread 在单核和多核上的行为差异
开发语言·c++
Brilliantwxx10 小时前
【Linux】 进程(9)程序与进程地址空间(基础+进阶+面试题)
linux·运维·服务器·开发语言·c++
BizzZ_10 小时前
C++(22)——类型转换和IO流
开发语言·c++
青梅味猪大肠13 小时前
【深入浅出C++】为什么虚表指针可以解决菱形继承
开发语言·c++
Lhan.zzZ14 小时前
QML 组件库:VS2022 + Qt 静态库方案
开发语言·c++·qt·visual studio
一木 之林16 小时前
五、C++ 新特性、关键字与编译原理(进阶)(二)
java·开发语言·c++