2015-04-16 110 views
-1

我有一个类,其中存储有一个类型为int的变量。然后,我创建了一个载体,这个载体包含这个类,然后我需要排序。 然而,我的问题源于这样一个事实,即我需要使用存储在该类内部的int的值以增强顺序对向量进行排序。根据类中的变量对类的向量进行排序

我看了一下std::sort()内置于C++类,但似乎无法得到它的工作。我也看过帖子,如Sorting a vector of custom objects ,并试图使用这个,但无济于事。作为一个便笺,这是我的第一篇文章,所以如果我做错了什么,请让我知道,以便我可以纠正这个问题。

回答

4

如果你有你的类对象

std::vector<MyClass> objs; 

的矢量和变量排序是

MyClass.value 

然后你就可以

std::sort(objs.begin(), 
      objs.end(), 
      [](const MyClass& lhs, const MyClass& rhs) 
{ 
    return lhs.value < rhs.value; 
}); 
+0

我曾经尝试这样做“的std ::排序(NodeList.begin(),节点列表.end(),[](const Node&lhs,const Node&rhs){lhs.F std :: _ Unguarded_pa​​rtition <_RanIt,_Pr>(_RanIt,_RanIt,_Pr)'“ – Crimson

+0

您错过了'return'关键字 – CoryKramer

+0

做到了,谢谢堆,但是你能解释第三个参数做什么,以便我可以从中学习? – Crimson

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;}); 
相关问题