算法简介
函数原型:
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;
}