你只需要或者实施该类为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;});
我曾经尝试这样做“的std ::排序(NodeList.begin(),节点列表.end(),[](const Node&lhs,const Node&rhs){lhs.F std :: _ Unguarded_partition <_RanIt,_Pr>(_RanIt,_RanIt,_Pr)'“ –
Crimson
您错过了'return'关键字 – CoryKramer
做到了,谢谢堆,但是你能解释第三个参数做什么,以便我可以从中学习? – Crimson