如何通过使用for循环c ++放入另一个向量来组织一个向量

时间:2012-08-21 12:39:53

标签: c++ sorting vector organizer

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

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中。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

如果您尝试对矢量进行排序,可以为对象定义自定义小于比较器,并使用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);

答案 1 :(得分:1)

因为当您将最小的人从旧阵列中移除时,您不会将其移除。考虑值[5,4,3,2,1]

您的算法会在i的第一个值上找到最小值j=4 (value 1)并将1推到新数组上,然后它会为i=2执行此操作,依此类推,直到您只有[1,1,1,1,1]

这是你在做什么,粗体数字是循环的数字,第二个数组是输出数组。

通过1:
[ 5 4 3 2 1 ] [1]

通过2:
[5, 4 3 2 1 ]
[1,1]

通过3:
[5,4, 3 2 1 ]
[1,1,1]

通过4:
[5,4,3, 2 1 ]
[1,1,1,1]

通过5:
[5,4,3,2, 1 ]
[1,1,1,1,1]

每次将新项目添加到新项目时,只需删除刚刚找到的项目。当然,正如其他人指出的那样,使用std的排序算法实际上会更好