我想知道如何通过将一个向量放置到另一个向量中来组织它。 (注意:它们是对象的向量)。到目前为止,我有:

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

10-05 20:01