当前位置: 首页 > article >正文

自定义比较方法1 仿函数(set,map)

自己写的类,必须自定义比较方法才能使用,为 set 自定义比较方法,及第二个参数,只能使用仿函数,不能使用函数。

std::set 需要一个类型来作为它的比较器,而函数不是类型。即使你有一个函数,你也需要将其包装在一个仿函数中才能作为模板参数使用。不过,C++ 提供了一种方式来简化这一过程——通过使用标准库中的 std::function 或者自定义仿函数封装函数指针。

但是,通常更简单和推荐的方法是直接定义一个仿函数结构体或类,并将其作为模板参数。

函数对象 ( 仿函数 ) 是一个 ,不是一个函数
#include <iostream>
#include <set>
#include <string>
using namespace std;

class Person
{
public:
    Person(string name, int age) {
        this->m_Name = name;
        this->m_Age = age;
    }
    string m_Name;
    int m_Age;
};

class comparePerson
{
public:
    bool operator()(const Person& p1, const Person &p2) {
        //按照年龄进行排序 降序
        return p1.m_Age > p2.m_Age;
    }
};

//bool comparePerson(const Person& p1, const Person &p2) {
//    return p1.m_Age > p2.m_Age;
//}

void test01()
{    // 在创建时指名比较方法,这里只能使用仿函数不能使用函数
    set<Person, comparePerson> s;
    Person p1("刘备", 23);
    Person p2("关羽", 27);
    Person p3("张飞", 25);
    Person p4("赵云", 21);
    s.insert(p1);
    s.insert(p2);
    s.insert(p3);
    s.insert(p4);
    for (set<Person, comparePerson>::iterator it = s.begin(); it != s.end(); it++) {
        cout << "姓名: " << it->m_Name << " 年龄: " << it->m_Age << endl;
    }
}
int main() {
    test01();
    return 0;
}

http://www.kler.cn/a/543119.html

相关文章:

  • 【Elasticsearch】分析器的构成
  • 16.React学习笔记.React更新机制
  • JavaScript相关知识点
  • uniapp 编译生成鸿蒙正式app步骤
  • 初识计算机网络
  • Curser2_解除机器码限制
  • C语言基础入门:2.5基础输入输出
  • Ubuntu 上安装和配置 Apache RocketMQ 4.7.1
  • Linux | 系统调用
  • 变化检测相关论文可读list
  • 展厅为何倾向使用三维数字沙盘进行多媒体互动设计?优势探讨!
  • 8K样本在DeepSeek-R1-7B模型上的复现效果
  • [隧道代理] 隧道代理 — 端口转发 - SSH 端口转发
  • deepseek + kimi 高效生成PPT
  • 如何在个人电脑本地化部署Deepseek-R1大模型
  • 【Rust中级教程】1.4. 内存 Pt.2:栈内存、栈帧(stack frame)、栈指针(stack pointer)
  • 【动态规划篇】:动态规划解决路径难题--思路,技巧与实例
  • 国产化FMC接口通用计算平台设计原理图:2367-基于FMQL45T900 FMC接口通用计算平台
  • .NET Web-静态文件访问目录浏览
  • Django中apps.py作用
  • Day58_20250206_图论part3_101.孤岛的总面积|102.沉没孤岛|103.水流问题|104.建造最大岛屿
  • 51c大模型~合集112
  • 集合家族详情
  • ASUS/华硕飞行堡垒9 FX506H FX706H 原厂Win10系统 工厂文件 带ASUS Recovery恢复
  • 基于 ollama 在linux 私有化部署DeepSeek-R1以及使用RESTful API的方式使用模型
  • vue2 多页面pdf预览