2016-11-13 21 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になり、カスタム比較関数を使用したそれ以上の並べ替えではこの順序が保持されます。

関連する問題