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

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);

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值