2016-11-13 109 views
-1

我正在嘗試列表容器的排序功能,將函數對象和函數指針作爲比較函數傳遞。 但不知何故,功能對象版本沒有解決。 輸出爲l.sort(MylessFuncObj())是:爲什麼列表容器的排序功能不起作用

1 
2 
3 
5 
45 

雖然我預計產量爲1 2 3 45 5.另一件事我不太明白的是,如果l.sort()使用它之前的是l.sort(MylessFuncObj())沒有很好地工作。

我剛開始學習CPP,我真的卡住..

#include <list> 
    #include <iostream> 
    using namespace std; 
    class MylessFuncObj 
    { 
    public: 
     bool operator()(const int &a, const int &b){ 
      return (a%10)<(b%10); 
     } 

    }; 
    bool Mylessfunc(const int &a, const int &b){ 
     return (a%10)<(b%10); 
    } 

int main() 
{ 
    list<int> l={1, 2, 3, 45,5}; 
    l.sort(Mylessfunc); 
    for(int j:l) cout<<j<<endl; 
    l.sort(); 
    cout<<endl; 
    for(int j:l) cout<<j<<endl; 
    cout<<endl; 
    l.sort(MylessFuncObj()); 
    for(int j:l) 
    cout<<j<<endl; 
    return 0; 
} 
+1

整數不按照字典順序排列......它們按價值排序.......你真的在現實生活中以這種方式分類數量嗎? –

+0

您是否嘗試使用相同的一組值對列表的不同實例進行初始化,而不是多次對相同列表進行排序? – PermanentGuest

+1

它根據您的排序功能正確排序。你爲什麼認爲45歲以前必須5歲? – interjay

回答

1

45和5,根據您的比較函數比較爲相等,這樣他們就可以以任意順序出現。列表排序是穩定的,所以它們將保持原來的順序。

最初,這個訂單是45 5,這是你的第一個印刷品應該顯示的內容。在l.sort()(使用默認比較功能)之後,訂單變爲5 45,並且使用您的自定義比較功能進一步分類將保留此訂單。

相關問題