vector使用find函数查找struct结构体内容
1.基本类型的查找
在一般情况下,vector在基本类型场景下可以直接find函数,如下:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
vector <int> arr;
arr.push_back(1);
arr.push_back(3);
arr.push_back(7);
arr.push_back(2);
//查找
vector <int>::iterator it;
int x = 7;
it = find(arr.begin(), arr.end(), x);
if( it != arr.end() )
{
cout << "Find!" << endl;
}
else
cout << "Not find!" << endl;
}
2.复杂类型的查找
复杂类型的查找不能直接使用find函数,否则会报错。需要手写==重载函数。
例如结构体的查找,代码如下:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct edge_str{
int posx,posy;
//查找结构体e是否存在
bool operator == (const edge_str &e){
return (this->posx == e.posx) && (this->posy == e.posy);
}
//查找数值pos是否与posx相等
bool operator == (const int &pos){
return (this->posx == pos);
}
};
int main(){
vector <edge_str> arr;
//1.查找结构体x是否存在与arr中
vector <edge_str>::iterator it;
edge_str x;
x.posx=5;
x.posy=7;
it = find(arr.begin(), arr.end(), x);
if( it != arr.end() )
{
cout << "Find!" << endl;
}
else
cout << "Not find!" << endl;
//2 .查找数值pos是否存在与arr的posx中
vector <edge_str>::iterator it2;
int pos=7;
it2 = find(arr.begin(), arr.end(), pos);
if( it2 != arr.end() )
{
cout << "Find!" << endl;
}
else
cout << "Not find!" << endl;
}