【问题标题】:how to organize one vector by placing into another vector using for loop c++如何通过使用for循环c ++放入另一个向量来组织一个向量
【发布时间】:2012-08-21 12:39:52
【问题描述】:

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

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
  • 按照“done()”的顺序放置每个“guy”并将其放置在“newGuy”中

标签: c++ sorting vector organizer


【解决方案1】:

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

【讨论】:

  • 数据类型显然是double,在这种情况下不需要自定义比较器
  • 有效!我对编程和 C++ 还很陌生,但还是谢谢你!
【解决方案2】:

因为当您将最小的人放入新数组时,您并没有从旧数组中删除它。考虑值[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、4321]
[1,1]

第 3 关:
[5、4、321]
[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 的排序算法会更好

【讨论】:

    猜你喜欢
    • 2021-04-18
    • 1970-01-01
    • 2020-07-05
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 2010-09-23
    • 1970-01-01
    相关资源
    最近更新 更多