我想知道如何通过将一个向量放置到另一个向量中来组织它。 (注意:它们是对象的向量)。到目前为止,我有:
double done;
for ( int i = 0; i < id; i++ )
{
done = guy[i].done();
int smallest = i;
for( int j = i + 1; j < id; j++ ){
if( done > guy[j].done() )
{
done = guy[j].done();
smallest = j;
}
}
newGuy.push_back( guy[smallest] );
}
这并不能组织向量的每个部分,有时甚至会将同一个人复制到newGuy中。有任何想法吗?
最佳答案
如果要对向量进行排序,则可以为对象定义一个自定义小于比较器,并使用std::sort。
bool myComparison(const MyType& lhs, const MyType& rhs) {
return lhs.done() < rhs.done();
}
std::vector<MyType> guy = ....;
std::sort(guy.begin(), guy.end(), myComparison);
如果要全部转移到新矢量,则只需复制原始矢量,然后对副本进行排序:
std::vector<MyType> newGuy = guy;
std::sort(newGuy.begin(), newGuy.end(), myComparison);