常用查找算法之find算法

2021-03-02 14:39:33 浏览数 (1)

算法简介

函数原型:

find查找自定义数据类型时,要对==运算符进行重载,否则编译器不知道如何进行p是否等于p1的比较

代码语言:javascript复制
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<string>
//find算法
//1.内置数据类型
void test01()
{
	vector<int> v = { 1,2,3,4,5,7 };
	vector<int>::iterator it;
	it=find(v.begin(), v.end(), 3);
	if (it != v.end())
	{
		cout << "查找到该元素:" << *it << endl;
	}
	else {
		cout << "查不到" << endl;
	}
}
//2.自定义数据类型
class person {
public:
	person(string name,int age):name(name),age(age){}
	string name;
	int age;
	//重载==,让底层find知道如何对比person数据类型
	//传入的参数要加const,不然会报错
	bool operator==(const person& p) 
	{
		if (p.name == this->name && p.age == this->age)
		{
			return true;
		}
		else 
		{
			return false;
		}
	}
};
void test02()
{
	person p1("孙悟空", 1000);
	person p2("猪八戒", 800);
	person p3("沙僧", 500);
	vector<person> v = { p1,p2,p3 };
	vector<person>::iterator it;
	//查找p是否在v容器中存在
	person p("孙悟空", 1000);
	it = find(v.begin(), v.end(), p);
   //find查找自定义数据类型时,要对==运算符进行重载,否则编译器不知道如何进行p是否等于p1的比较
	//对比完后返回的是真假,如果为真返回当前迭代器
	if (it != v.end())
	{
		cout << "查找到该元素"<< endl;
		cout << "姓名: " << (*it).name << " 年龄: " << (*it).age << endl;
	}
	else {
		cout << "查不到" << endl;
	}


}
int main()
{
	//test01();
	test02();
	system("pause");
	return 0;
}

0 人点赞