根据类中的变量对类的向量进行排序

Cri*_*son 0 c++ sorting class vector

我有一个其中int存储有类型变量的类。然后,我创建了一个向量,其中包含此类,然后需要对其进行排序。但是,我的问题源于以下事实:我需要使用存储在该类内部的int值(按升序)对向量进行排序。

我看过std::sort()C ++内置的类,但似乎无法使它正常工作。我也看过诸如“ 排序自定义对象的向量”之类的帖子, 并尝试使用它,但无济于事。

附带说明,这是我的第一篇文章,因此,如果我做错了任何事情,请告诉我,以便我纠正问题。

Cor*_*mer 6

如果您有类对象的向量

std::vector<MyClass> objs;
Run Code Online (Sandbox Code Playgroud)

而要排序的变量是

MyClass.value
Run Code Online (Sandbox Code Playgroud)

那么你也能

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


Sin*_*all 6

您只需要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)
}
Run Code Online (Sandbox Code Playgroud)

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

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