2017-03-28 9 views
0

これは割り当ての一部であるとして、オブジェクトを渡すことは、私はこの命令で立ち往生しています:スケジュールのstable_sortを使用して、カスタム比較演算子

ソートあなたのランダムに生成されたプール。 std :: stable_sort、 を使用して、カスタム比較 演算子としてschedule_compare型のオブジェクトを渡します。


UPDATE:私はcppreference stable_srot()をチェックしていた、以下のメソッド定義を参照してください。

void stable_sort (RandomAccessIterator first, RandomAccessIterator 
last,Compare comp); 

を、そしてそれは私が理解したものからと思われるだけ最後に関数を渡すことができるということですstable_sort()の引数(Compare comp):

ただし、指示には、タイプschedule_compareのオブジェクトを渡します。これはどのように可能ですか?


これは、以下の私のコードです:あなたはの関数としてを呼び出すことができる何かを渡すことができます(​​のような)「機能を」受け入れアルゴリズム関数の場合

struct schedule_compare 
    { 
     explicit schedule_compare(runtime_matrix const& m) 
       : matrix_{m} { } 

     bool operator()(schedule const& obj1, schedule const& obj2) { 
      if (obj1.score > obj2.score) 
       return true; 
      else 
       return false; 
     } 

    private: 
     runtime_matrix const& matrix_; 
    }; 

    auto populate_gene_pool(runtime_matrix const& matrix, 
          size_t const pool_size, random_generator& gen) 
    { 

     std::vector<schedule> v_schedule; 
     v_schedule.reserve(pool_size); 

     std::uniform_int_distribution<size_t> dis(0, matrix.machines() - 1); 

     // 4. Sort your randomly generated pool of schedules. Use 
     // std::stable_sort, passing in an object of type 
     // schedule_compare as the custom comparison operator. 

     std::stable_sort(begin(v_schedule), end(v_schedule), ???) 

     return; v_schedule; 
    } 
+0

あなたが表示するコードにはどのような問題がありますか?あなたがまだそれをしていないなら、[良い質問をする方法を読む](http://stackoverflow.com/help/how-to-ask)に時間をかけてください。 –

+0

@Someprogrammerdude、とにかく、私に言ってくれてありがとうと思いました。病気を今更新する – Suhaib

+0

常に明示的にすることをお勧めします。 :) –

答えて

3

たとえば、グローバルな名前空間またはstaticメンバー関数へのポインター。 ファンクタオブジェクトとも呼ばれるファンクションのようなオブジェクトインスタンス(つまり、関数呼び出し演算子を持つクラスのインスタンス)を渡すことができます。それができる

std::stable_sort(begin(v_schedule), end(v_schedule), schedule_compare(matrix)); 

schedule_compare構造は、関数呼び出し演算子を持っているので(operator()メンバ関数を):

この

は単に一時的なオブジェクトを作成し、(あなたのケースで) std::stable_sortに渡すことで行われます一般的に他の機能と同様に扱われます。

+0

です。それは深いものでした。これはどのように動作するのかを理解するために、 'v_schedule'の各要素は最終的に' matrix'と比較され、それに基づいてソートされます。正しいでしょうか? ps: 'matrix_runtime'は' std :: vector elements_; 'をプライベートとして持っています。 – Suhaib