基于类中的变量对类的向量进行排序

时间:2015-04-16 13:25:47

标签: c++ class sorting vector

我有一个类,其中存储了一个int类型的变量。然后我创建了一个向量中包含此类的向量,然后我需要对其进行排序。 然而,我的问题源于这样一个事实,即我需要使用以加速顺序存储在此类内部的int的值对矢量进行排序。

我查看了C ++中内置的std::sort()类,但似乎无法使其工作。我还查看了诸如Sorting a vector of custom objects之类的帖子 并试图使用它,但没有用。

作为旁注,这是我的第一篇文章,所以如果我做错了什么,请告诉我,以便我能解决问题。

2 个答案:

答案 0 :(得分:4)

如果你有一个类对象的向量

std::vector<MyClass> objs;

要排序的变量是

MyClass.value

然后你可以

std::sort(objs.begin(),
          objs.end(),
          [](const MyClass& lhs, const MyClass& rhs)
{
    return lhs.value < rhs.value;
});

答案 1 :(得分:2)

您只需为该类实现operator<,或为std::sort提供比较函数:

class MyClass
{
public:
    MyClass(int val) : i(val){}
    bool operator<(const  MyClass & other) //(1)
    {
        return i < other.i;
    }

    int i;
};

bool compare(const MyClass & l, const MyClass & r) //(2)
{
    return l.i < r.i;
}


int main( int argc, char *argv[] )
{
    std::vector<MyClass> vec;
    vec.push_back(MyClass(5));
    vec.push_back(MyClass(1));
    vec.push_back(MyClass(3));
    std::sort(vec.begin(), vec.end());//works if operator < is present (1)
    std::sort(vec.begin(), vec.end(), compare);//works if comparison function is present (2)
}

如果您使用的是c ++ 11,还可以提供lambda作为比较函数:

std::sort(vec.begin(), vec.end(), [](MyClass & one, MyClass & two){return one.i < two.i;});