你只需要或者實施該類爲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