STL常用算法——常用查找算法

 自定义类型都要用仿函数判断

 1.find()

class Person
{
public:Person(string name,int age){this->m_Name = name;this->m_Age = age;}bool operator==(const Person &p)//重载operator={if (this->m_Name == p.m_Name && this->m_Age == p.m_Age){return true;}return false;}string m_Name;int m_Age;
};
void test01()//find查找内置类型
{vector<int> v1;v1.push_back(10);v1.push_back(20);v1.push_back(30);v1.push_back(40);v1.push_back(50);//find查找内置类型auto it = find(v1.begin(), v1.end(), 40);//auto自动推出it类型(vector<int>::iterator)if (it == v1.end()){cout << "没找到这个元素" << endl;}else{cout << "找到这个元素:" << *it << endl;}
}
void test02()find查找自定义类型//类内部要重载operator=
{vector<Person> p;Person p1("张三", 10);Person p2("李四", 15);Person p3("王五", 13);Person p4("赵六", 16);p.push_back(p1);p.push_back(p2);p.push_back(p3);p.push_back(p4);Person pf("赵六", 14);auto it = find(p.begin(), p.end(), pf);//auto自动推出it类型(vector<int>::iterator)if (it == p.end()){cout << "没找到这个人" << endl;}else{cout << "找到了,姓名:" << it->m_Name << " 年龄:" << it->m_Age << endl;}
}

2.find_if()

class Person
{
public:Person(string name,int age){this->m_Name = name;this->m_Age = age;}string m_Name;int m_Age;
};
class Greater20//test01
{
public:bool operator()(int val){return val > 20;}};
class MyCompare//test02
{
public:bool operator()(Person& p){return (p.m_Age > 15);}
};
void test01()//find_if查找内置类型
{vector<int> v1;v1.push_back(10);v1.push_back(20);v1.push_back(30);v1.push_back(40);v1.push_back(50);vector<int>::iterator it=find_if(v1.begin(), v1.end(), Greater20());cout << "找到了:" << *it << endl;
}
void test02()find_if查找自定义类型
{vector<Person> p;Person p1("张三", 10);Person p2("李四", 15);Person p3("王五", 13);Person p4("赵六", 16);p.push_back(p1);p.push_back(p2);p.push_back(p3);p.push_back(p4);Person pf("赵六", 16);vector<Person>::iterator it = find_if(p.begin(), p.end(),MyCompare());if (it == p.end()){cout << "没找到这个人" << endl;}else{cout << "找到了,姓名:" << it->m_Name << " 年龄:" << it->m_Age << endl;}
}

3.adjacent_find()

void test01()
{vector<int> v1;v1.push_back(10);v1.push_back(20);v1.push_back(40);v1.push_back(30);v1.push_back(40);v1.push_back(40);v1.push_back(50);vector<int>::iterator it = adjacent_find(v1.begin(), v1.end());//查找相邻相同元素cout << "找到了:" << *it << endl;
}

4.binary_search()//二分查找

void test01()
{vector<int> v1;v1.push_back(10);v1.push_back(20);v1.push_back(40);v1.push_back(30);v1.push_back(40);v1.push_back(40);v1.push_back(50);sort(v1.begin(), v1.end());//降序不行bool ret = binary_search(v1.begin(), v1.end(), 30);if (ret){cout << "找到了" << endl;}else{cout << "没找到" << endl;}
}

5.count()

class Person
{
public:Person(string name,int age){this->m_Name = name;this->m_Age = age;}bool operator==(const Person& p){if (this->m_Age == p.m_Age)//按年龄查找年龄相等的人的个数{return true;}return false;}string m_Name;int m_Age;
};
void test01()//count查找内置类型
{vector<int> v1;v1.push_back(10);v1.push_back(20);v1.push_back(40);v1.push_back(30);v1.push_back(40);v1.push_back(40);v1.push_back(50);int num = count(v1.begin(), v1.end(), 40);//统计40的个数cout << "40的个数是:" << num << endl;}
void test02()//count查找自定义类型
{vector<Person> p;Person p1("张三", 10);Person p2("李四", 15);Person p3("王五", 15);Person p4("赵六", 16);p.push_back(p1);p.push_back(p2);p.push_back(p3);p.push_back(p4);Person pf("张麻子", 15);int num = count(p.begin(), p.end(), pf);cout << "num=" << num << endl;
}

6.count_if()

class Person
{
public:Person(string name,int age){this->m_Name = name;this->m_Age = age;}string m_Name;int m_Age;
};
class MyCompare
{
public:bool operator()(const int val){return val > 30;}
};
class AgeGreater14
{
public:bool operator()(const Person& p){return p.m_Age > 14;//统计年龄大于14的人的个数}
};
void test01()//count_if统计内置类型
{vector<int> v1;v1.push_back(10);v1.push_back(20);v1.push_back(40);v1.push_back(30);v1.push_back(40);v1.push_back(40);v1.push_back(50);int num = count_if(v1.begin(), v1.end(), MyCompare());//统计大于30的个数cout << "大于30的个数是:" << num << endl;}
void test02()//count_if统计自定义类型
{vector<Person> p;Person p1("张三", 10);Person p2("李四", 14);Person p3("王五", 15);Person p4("赵六", 16);p.push_back(p1);p.push_back(p2);p.push_back(p3);p.push_back(p4);int num = count_if(p.begin(), p.end(),AgeGreater15());cout << "num=" << num << endl;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/48227.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NVIDIA 全面转向开源 GPU 内核模块

NVIDIA 全面转向开源 GPU 内核模块 文章目录 NVIDIA 全面转向开源 GPU 内核模块支持的 GPU安装程序更改使用带有 CUDA 元包的包管理器 使用运行文件使用安装帮助脚本包管理器详细信息dnf&#xff1a;Red Hat Enterprise Linux、Fedora、Kylin、Amazon Linux 或 Rocky Linuxzypp…

网络安全等级保护:什么是网络安全等级保护?(非常详细)零基础入门到精通,收藏这一篇就够了

关键词&#xff1a; 网络安全等级保护 等级保护 网络 信息系统 旧话重提&#xff0c;一直以来&#xff0c;我们不断强调“等级保护”制度是我国的网络安全领域的基本制度、基本策略和基本方法&#xff0c;是促进信息化健康发展&#xff0c;维护国家安全、社会秩序和公共利益的…

数字图像处理中的常用特殊矩阵及MATLAB应用

一、前言 Matlab的名称来源于“矩阵实验室&#xff08;Matrix Laboratory&#xff09;”&#xff0c;其对矩阵的操作具有先天性的优势&#xff08;特别是相对于C语言的数组来说&#xff09;。在数字图像处理中&#xff0c;为了提高编程效率&#xff0c;我们可以使用多种方式来创…

Mysql数据库和Sql语句

数据库管理&#xff1a; sql语句&#xff1a;数据库用来增删改查的语句&#xff08;重要&#xff09; 备份&#xff1a;数据库的数据进行备份 主从复制、读写分离、高可用&#xff08;重要&#xff09; Mysql数据库和Sql语句 一、Mysql数据库 1、数据库&#xff1a;组织、…

Java基础(四) 内部类详解

Java 内部类详解 一. 内部类概述 内部类是嵌套在类内部进行定义的类&#xff0c;其外部的类则被称为外部类&#xff1b;按照内部类的定义位置&#xff0c;内部类可进一步划分为成员内部类、静态内部类、局部内部类和匿名内部类四种类型。内部类的出现实际上是进一步丰富了类的…

Modbus转BACnet/IP网关的技术实现与应用

引言 随着智能建筑和工业自动化的快速发展&#xff0c;不同通信协议之间的数据交换也变得日益重要。Modbus和BACnet/IP是两种广泛应用于自动化领域的通信协议&#xff0c;Modbus以其简单性和灵活性被广泛用于工业自动化&#xff0c;而BACnet/IP则在楼宇自动化系统中占据主导地…

Android APP 音视频(03)CameraX预览与MediaCodec编码

说明&#xff1a; 此CameraX预览和编码实操主要针对Android12.0系统。通过CameraX预览获取yuv格式数据&#xff0c;将yuv格式数据通过mediacodec编码输出H264码流&#xff08;使用ffmpeg播放&#xff09;&#xff0c;存储到sd卡上。 1 CameraX 和 MediaCodec简介 1.1 CameraX…

“微软蓝屏”事件,给IT行业带来的宝贵经验和教训

“微软蓝屏”事件是指2024年7月19日发生的一次全球性技术故障&#xff0c;主要涉及微软视窗&#xff08;Windows&#xff09;操作系统及其相关应用和服务。 以下是对该事件的详细解析&#xff1a; 一、事件概述 发生时间&#xff1a;2024年7月19日事件影响&#xff1a;全球多个…

【科学文献计量】中国知网(CNKI) 文献素材库生成软件详细使用说明

CNKI 文献素材库生成软件制作 1 背景2 使用步骤2.1 文献检索2.2 文献导出2.3 软件生成1 背景 在进行中文文献的综述时,往往是要借助中国知网(CNKI)文献检索平台,写作插入文献时会用Endnote软件进行辅助。因此就有需求:对于CNKI检索的结果直接导出到本地,第一是方便快速阅…

基于STM32的农业大棚温湿度采集控制系统的设计

目录 1、设计要求 2、系统功能 3、演示视频和实物 4、系统设计框图 5、软件设计流程图 6、原理图 7、主程序 8、总结 &#x1f91e;大家好&#xff0c;这里是5132单片机毕设设计项目分享&#xff0c;今天给大家分享的是智能教室。 设备的详细功能见网盘中的文章《8、基…

“机器说人话”-AI 时代的物联网

万物互联的物联网愿景已经提了许多年了&#xff0c;但是实际效果并不理想&#xff0c;除了某些厂商自己的产品生态中的产品实现了互联之外&#xff0c;就连手机控制空调&#xff0c;电视机和调光灯都没有实现。感觉小米做的好一点&#xff0c;而华为的鸿蒙的全场景&#xff0c;…

C#+layui+echarts实现动态生成折线图

概要 C#layuiecharts实现动态生成折线图 整体架构流程 后端是c#语言编写的业务流程,前端是layui和echarts 技术细节 1.先看echarts折线图需要什么样子的数据,在想后端怎么处理 2.后端代码 List<ValveTempData> list new List<ValveTempData>(); string …

Docker容器逃逸漏洞-CVE-2024-21626

Snyk 在 Docker 引擎以及其他容器化技术(例如 Kubernetes)使用的 runc <=1.1.11 的所有版本中发现了一个漏洞。利用此问题可能会导致容器逃逸到底层主机操作系统,无论是通过执行恶意映像还是使用恶意 Dockerfile 或上游映像构建映像(即使用时FROM) CVE-2024-21626原理…

生成式人工智能之路,从马尔可夫链到生成对抗网络

人工智能&#xff08;Artificial intelligence&#xff0c;AI&#xff09;技术在过去几年中取得了显著进展&#xff0c;其中生成式AI&#xff08;Generative AI&#xff09;因其强大的内容生成能力而备受关注。生成式AI可以创建新的文本、图像、音频、视频、代码以及其他形式的…

SSRF学习笔记

1.NAT学习 Nat&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;是 一种网络通信技术主要用于将私有网络中的内部IP地址转换成公共网络中的公共IP地址&#xff0c;以实现局域网内部设备访问互联网的功能。具体来说&#xff0c;Nat有以下几个主要…

Matlab画不同指标的对比图

目录 一、指标名字可修改 二、模型名字可修改 三、输入数据可修改 软件用的是Matlab R2024a。 clear,clc,close all figure1figure(1); % set(figure1,Position,[300,100,800,600],Color,[1 1 1]) axes1 axes(Parent,figure1);%% Initialize data points 一、指标名字可修…

MongoDB 学习笔记

一、简介 1、MongoDB 是什么 MongoDB 是一个基于分布式文件存储的数据库&#xff0c;官方地址 https://www.mongodb.com/ 2、数据看是什么 数据库&#xff08;DataBase&#xff09;是按照数据结构来组织、存储和管理数据的应用程序。 3、数据库的作用 主要作用是 管理数据…

mybatis中的缓存(一级缓存、二级缓存)

文章目录 前言一、MyBatis 缓存概述二、一级缓存1_初识一级缓存2_一级缓存命中原则1_StatementId相同2_查询参数相同3_分页参数相同4_sql 语句5_环境 3_一级缓存的生命周期1_缓存的产生2_缓存的销毁3_网传的一些谣言 4_一级缓存核心源码5_总结 三、二级缓存1_开启二级缓存2_二级…

基于Hutool实现自定义模板引擎,实现json个性化模板引擎转换

文章目录 前言编写引擎类&#xff1a;JsonTemplateEngine编写模板类&#xff1a;CustomTemplate编写测试代码测试json文件测试类 前言 由于百度搜索json模板引擎&#xff0c;推荐的都是一些freemarker之类的&#xff0c;需要引入其他的依赖&#xff0c;而且在编写json模板的时…

学习在测试时学习(Learning at Test Time)_ 具有表达性隐藏状态的循环神经网络(RNNs)

摘要 https://arxiv.org/pdf/2407.04620 自注意力机制在长文本语境中表现良好&#xff0c;但其复杂度为二次方。现有的循环神经网络&#xff08;RNN&#xff09;层具有线性复杂度&#xff0c;但其在长文本语境中的性能受到隐藏状态表达能力的限制。我们提出了一种新的序列建模…