std::vector sort containing classes

记录

环境:vs2008 windows7

说明:对于std::vector的排序,可以用sort()方法(#include <algorithm>)

如果std::vector中的元素未定义'<'运算符,那么,可以通过自定义比较函数用来进行排序

例如:

class testTT
{
public:
int index;
float f;
float ff;
testTT(int index,float f,float ff){this->index = index,this->f = f;this->ff = ff;}
};

bool MyComp(testTT t1,testTT t2)
{
return t1.index < t2.index;
}

int main()

{

std::vector<testTT> ttt;
std::vector<testTT>::iterator it;

for( int i = 5; i > 0; i--)
{
ttt.push_back(testTT(i,((float) i)* 0.1,((float) i )* 0.01));
}

for(it = ttt.begin() ;it!= ttt.end();it++)
{
std::cout<<it->index << "  "<< it->f << "  "<<it->ff<<std::endl;
}

std::cout<<std::endl;
sort(ttt.begin(),ttt.end(),MyComp);

for(it = ttt.begin() ;it!= ttt.end();it++)
{
std::cout<<it->index << "  "<< it->f << "  "<<it->ff<<std::endl;
}

return 0;

}


如果std::vector中的元素定义了‘<’运算符的方法,就可以不用指定比较 函数

例如:

class testTT
{
public:
int index;
float f;
float ff;
testTT(int index,float f,float ff){this->index = index,this->f = f;this->ff = ff;}
bool operator<(testTT t){return this->index < t.index;}
};

int _tmain(int argc, _TCHAR* argv[])
{
std::vector<testTT> ttt;
std::vector<testTT>::iterator it;

for( int i = 5; i > 0; i--)
{
ttt.push_back(testTT(i,((float) i)* 0.1,((float) i )* 0.01));
}

for(it = ttt.begin() ;it!= ttt.end();it++)
{
std::cout<<it->index << "  "<< it->f << "  "<<it->ff<<std::endl;
}

std::cout<<std::endl;
sort(ttt.begin(),ttt.end());

for(it = ttt.begin() ;it!= ttt.end();it++)
{
std::cout<<it->index << "  "<< it->f << "  "<<it->ff<<std::endl;
}

return 0;

}


总结:也就是说std::vector中的元素能够通过'<'进行比较的,可以直接进行排序sort(xxx.begin(),xxx.end()),

如果std::vector中的元素不能够通过‘<’进行比较,可以重载'<'运算符,然后直接进行比较sort(xxx.begin(),xxx.end());或自定义比较方法bool MyComp(XXX t1,XXX t2),

然后调用sort(xxx.begin(),xxx.end(),MyComp)即可。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值