使用向量中的对象排序

时间:2015-04-25 20:06:26

标签: c++ object vector

我有一个函数可以进行一些计算并将返回的值设置为我的向量。

#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值。

2 个答案:

答案 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在他的回答中所说的那样。