记录
环境: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)即可。