我有一个函数可以进行一些计算并将返回的值设置为我的向量。
#include <vector>
#include <algorithm>
#include <iostream>
void VectorLoop(vector<ClassName>& Vector)
{
float TempFloatVariable = 0.0;
int count = 0;
int update = 0;
while (count != Vector.size())
{
if (Vector[count].getValue() == 100.0) //I hardcode this so i can check if the Value is empty or not
{
//code that set all of the variable from the vector's memory's object
TempFloatVariable = AnotherClass.Formula //does the computing and return the value
//code that gets value from object for overloading
//code that gets value from object for overloading
//code that gets value from object for overloading
Vector[count].setValue(TempFloatVariable);
update++;
}
else
{
count++;
}
}
cout << "Computation completed! (" << update << " record(s) were updated)" << endl;
}
在完成所有计算之后,我想根据Value将它们从最高到最低排序,但我不知道如何这样做,我试图对其进行硬编码,逐个手动拉出值做比较,但一直都失败了。这会破坏使用矢量的目的,有许多使用矢量排序的例子,但其中90%是存储在矢量中的int值。
答案 0 :(得分:2)
正如IgorTandetnik所说:你可以做到
std::sort(Vector.begin(), Vector.end(), [](const PointTwoD& a, const PointTwoD& b)
{
return a.getcivIndex() > b.getcivIndex();
});
将使用lambda的结果对矢量进行排序,并且应该做你想要的。
要在矢量中打印对象,您应该执行以下操作:
for(int i = 0; i < Vector.size(); i++)
{
std::cout << Vector[i] << std::endl; //Or whatever your printing function is.
}
将遍历向量中的所有对象,因为它们应该已经按排序的降序排列,它将按照您想要的降序打印出来。
修改强>
对于非C ++ 11用户:您可以定义执行比较的函数
bool compare(const PointTwoD& a, const PointTwoD& b)
{
return a.getcivIndex() > b.getcivIndex();
}
并使用它而不是lambda。像这样:
std::sort(Vector.begin(), Vector.end(), compare);
答案 1 :(得分:1)
使用std::sort
:
template <class RandomAccessIterator>
void sort (RandomAccessIterator first, RandomAccessIterator last);
第一个参数是要排序的第一个元素的迭代器。第二个参数是排序后的最终迭代器位置(换句话说,一个超过您要排序的最终元素)。所以要排序你会这样做:
std::sort(Vector.begin(), Vector.end());
要确定如何实际执行排序,您需要定义一个&lt; PointTwoD的运算符,用于比较civ索引。或者,您可以创建一个外部函数,它将两个PointTwoDs作为参数并返回一个布尔值,并通过std :: sort的第三个参数指定它。如果sort函数需要访问私有成员,你需要在类定义中将它声明为友元函数。
如果你愿意,也可以使用lambda内联std :: sort调用中的compare函数,就像Phantom在他的回答中所说的那样。