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

news2024/9/23 19:23:36

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

 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.coloradmin.cn/o/1944431.html

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

相关文章

CSDN的动态在哪里

模板 文章目录 模板 如果对你有帮助&#xff0c;就点赞收藏把&#xff01;(&#xff61;&#xff65;ω&#xff65;&#xff61;)&#xff89;♡ 早上发了一个动态&#xff0c;这是我第一次发动态&#xff0c;然后却发现我不知道动态在哪打开 我找了好几个地方&#xff0c;然后…

FPGA实验6: 有时钟使能两位十进制计数器的设计

一、实验目的与要求 1.. 熟练掌握使用原理图设计较复杂电路&#xff1b; 2. 学习原理图设计中总线的表示以及使用方法。 二、实验原理 运用Quartus II 集成环境下的图形设计方法设计有时钟使能的两位十进制计数器。进行波形仿真和分析、引脚分配并下载到实验设备上进行功能…

JS进阶之以题悟道(一)列表内容排序再渲染

注释很详细&#xff0c;直接上代码 涉及知识点&#xff1a; 正则表达式outerHTMLjoinmap 题干&#xff1a; 我的答案 <!DOCTYPE html> <html><head><meta charset"utf-8" /><meta name"viewport" content"widthdevice-wid…

py3.7.4离线安装openpyxl等错误,无法安装openpyxl...

&#x1f3c6;本文收录于《CSDN问答解答》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…

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

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

【计算机毕业设计】基于微信小程序的传染病防控宣传系统【源码+lw+部署文档】

包含论文源码的压缩包较大&#xff0c;请私信或者加我的绿色小软件获取 免责声明&#xff1a;资料部分来源于合法的互联网渠道收集和整理&#xff0c;部分自己学习积累成果&#xff0c;供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者…

通过kali进行主机发现扫描

在虚拟机环境下配置4个虚拟系统“WinXP1” 、“WinXP2” 、“Kali Linux”和“Metasploitable2”&#xff0c;使得4个系统之间能够相互通信。其中&#xff0c;Windows xp1关闭防火墙状态&#xff0c;Windows xp2为开启防火墙状态。 1&#xff0e;在Kali的终端中分别输入命令“…

腾讯云k8s相关

1.某个服务腾讯云内网地址&#xff1f; 比如&#xff1a;spiderflow-web正式环境&#xff1a;http://spiderflow-web.sd-backend:30001 试一试&#xff1a;

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《考虑静暂态电压稳定性的双极直流不平衡配电系统DG规划方法》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

Pycharm2024最新版community社区版下载安装配置,快速上手

第一步&#xff1a;下载 方法1&#xff1a;官网链接 https://www.jetbrains.com/pycharm/download/?sectionwindows .方法2&#xff1a;百度网盘 链接&#xff1a;https://pan.baidu.com/s/1ic2N5hUQ2m1Kmyr5nK9Jxw?pwd76dt 提取码&#xff1a;76dt --来自百度网盘超级…

力扣3226 使两个整数相等的位更改次数

写的代码&#xff1a; class Solution { public:string cc(int num){string res"";while(num>0){int rnum % 2;resstatic_cast<char>(48r)res;num/2;}return res;}int minChanges(int n, int k) {int res0;string n2cc(n);string k2cc(k);int n_sizen2.siz…

samba安装和dns服务

samba [rootlocalhost ~]# vim /etc/selinux/config [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160 [rootlocalhost ~]# systemctl restart network 修改uuid的目的是为了保证网络服务的唯一性 1.创建…

GD 32 流水灯

前言&#xff1a; 通过后面的学习掌握了一些逻辑架构的知识&#xff0c;通过复习的方式将学到的裸机任务架构的知识运用起来&#xff0c;同时巩固前面学到的知识&#xff0c;GPIO的配置等。 开发板上LED引脚使用示意图 注&#xff1a;此次LED灯的点亮凡是是高电平点亮&#xff…

Java 集合中的 Vector 类和 Stack 类

一.介绍 Java 集合框架提供了一组强大的类和接口来处理和操作对象集合。其中&#xff0c;Vector 和 Stack 类提供了以顺序方式存储和管理元素的基本功能。这两个类都是传统集合的一部分&#xff0c;但由于它们的同步性质和特定用例&#xff0c;它们仍然具有相关性。Vector 类实…

【HarmonyOS】关于鸿蒙消息推送的心得体会(二)

【HarmonyOS】关于鸿蒙消息推送的心得体会&#xff08;二&#xff09; 前言 推送功能的开发与传统功能开发还是有很大区别。首先最大的区别点就在于需要多部门之间的协同&#xff0c;作为鸿蒙客户端开发&#xff0c;你需要和产品&#xff0c;运营&#xff0c;以及后台开发一起…

linux 部署flask项目

linux python环境安装: https://blog.csdn.net/weixin_41934979/article/details/140528410 1.创建虚拟环境 python3.12 -m venv .venv 2.激活环境 . .venv/bin/activate 3.安装依赖包(pip3.12 install -r requirements.txt) pip3.12 install -r requirements.txt 4.测试启…

Windows安装Visual Studio2022 + QT5.15开发环境

最近&#xff0c;把系统换成了Windows11&#xff0c;想重新安装QT5.12&#xff0c;结果发现下载不了离线安装包。 最后索性安装QT5.15了&#xff0c;特此记录下。 预祝大家&#xff1a;不论是何时安装&#xff0c;都可以安装到指定版本的QT。 一、VS2022安装 VS2022官网下…

推荐一款基于 SpringBoot2 的后台管理系统脚手架,非常轻量简单(附源码)

前言 在现代软件开发中&#xff0c;后台管理系统是企业数字化转型的关键组成部分。然而&#xff0c;现有软件常常存在一些痛点&#xff0c;如复杂的权限管理、缺乏灵活的工作流配置、监控和日志功能不完善等。此外&#xff0c;许多系统study 成本高&#xff0c;依赖关系复杂&a…

Pycharm软件Win 64位安装包+详细安装步骤 百度云

如大家所掌握的&#xff0c;Pycharm是一款集成开发环境&#xff08;IDE&#xff09;&#xff0c;专门用于python语言开发的工具。作为一款功能强大的IDE&#xff0c;Pycharm提供了丰富的功能和工具&#xff0c;使得python开发变得更加高效和便捷。 Pycharm常用场景如下&#x…

Unity发布XR中用于worldbuilding的全新电子书

通过身临其境的虚拟领域开始旅程&#xff0c;在维度之间传送&#xff0c;或将数字奇迹与现实世界融合——虚拟现实(VR)和混合现实(MR)的千万种可能性将邀请创作者把他们的想象力带入生活。 Unity发布的最新版综合指南将帮助有抱负的创作者和经验丰富的开发者深入研究和理解构建…