如何通过使用for循环c ++放入另一个向量来组织一个向量
Posted
技术标签:
【中文标题】如何通过使用for循环c ++放入另一个向量来组织一个向量【英文标题】:how to organize one vector by placing into another vector using for loop 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”中
【参考方案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、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 的排序算法会更好
【讨论】:
以上是关于如何通过使用for循环c ++放入另一个向量来组织一个向量的主要内容,如果未能解决你的问题,请参考以下文章
如何使用循环将带有来自 googlesearch 的链接的列表附加到另一个列表?