2015-04-16 153 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;}); 
相關問題