vector存储结构体时排序和查找

vector是一个很强大的容器,#include后就可以直接使用许多算法,如排序、查找等,但是当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 v1;

        vector v2;

vector::iterator it2=v2.begin();
vector::iterator it1;
for(;it2!=v2.end();it2++)
{
it1=find(v1.begin(),v1.end(),*it2);  
if (it1!=v1.end())
{
//找到了
}  
else
{  
//未找到
}  

}

下面实现一个功能,找到名字相同的结构体,把值大的保留,找不到的就添加该元素到vector中,实现两个向量的合并

函数如下:

vector combine_vec(vector& v1,vector& v2)
{  
vector::iterator it2=v2.begin();
vector::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

}

sort(vec.begin(),vec.end(),sort_by_value);

你可能感兴趣的:(C++学习笔记)