我有一个类,其中存储了一个int
类型的变量。然后我创建了一个向量中包含此类的向量,然后我需要对其进行排序。
然而,我的问题源于这样一个事实,即我需要使用以加速顺序存储在此类内部的int的值对矢量进行排序。
我查看了C ++中内置的std::sort()
类,但似乎无法使其工作。我还查看了诸如Sorting a vector of custom objects之类的帖子
并试图使用它,但没有用。
作为旁注,这是我的第一篇文章,所以如果我做错了什么,请告诉我,以便我能解决问题。
答案 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;});