vector是一个很强大的容器,#include<algorithm>后就可以直接使用许多算法,如排序、查找等,但是当vector内部存储结构体时,这些算法就就不能直接使用了
如定义结构体如下:
struct mydata
{
string name;
float value;
};
只需要定义一个比较函数
bool operator == (const info& left, const info& rigt)
{
//return left.name == rigt.name;//第一个变量相等即认为找到
return left.name == rigt.name && left.value==right.value;//结构体元素都相等才认为找到
}
接下来就可以这样使用find函数来执行查找操作了:
vector<mydata> v1;
vector<mydata> v2;
vector<mydata>::iterator it2=v2.begin();
vector<mydata>::iterator it1;
for(;it2!=v2.end();it2++)
{
it1=find(v1.begin(),v1.end(),*it2);
if (it1!=v1.end())
{
//找到了
}
else
{
//未找到
}
}
下面实现一个功能,找到名字相同的结构体,把值大的保留,找不到的就添加该元素到vector中,实现两个向量的合并
函数如下:
vector<mydata> combine_vec(vector<mydata>& v1,vector<mydata>& v2)
{
vector<info>::iterator it2=v2.begin();
vector<info>::iterator it1;
for(;it2!=v2.end();it2++)
{
it1=find(v1.begin(),v1.end(),*it2);
if (it1!=v1.end())
{
if(it2->value>it1->value)
{
it1->value = it2->value;
}
}
else
{
v1.push_back(*it2);
}
}
return v1;
}
vector存放结构体时排序:
先定义排序函数:
bool sort_by_value(const mydata& data1,const madata& data2 ){
return data1.value<data2.value;//小于号表示:从小到大排序
}
sort(vec.begin(),vec.end(),sort_by_value);