Cri*_*son 0 c++ sorting class vector
我有一个其中int存储有类型变量的类。然后,我创建了一个向量,其中包含此类,然后需要对其进行排序。但是,我的问题源于以下事实:我需要使用存储在该类内部的int值(按升序)对向量进行排序。
我看过std::sort()C ++内置的类,但似乎无法使它正常工作。我也看过诸如“ 排序自定义对象的向量”之类的帖子,
并尝试使用它,但无济于事。
附带说明,这是我的第一篇文章,因此,如果我做错了任何事情,请告诉我,以便我纠正问题。
如果您有类对象的向量
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)
您只需要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)