2017-08-23 3 views
0

私はベクトルの一意の要素を、関数に実装された条件でソートする必要があります。ベクトルと結果セットを見ることができるように、「のみ」はソートされるオブジェクトへの参照を含みます。ベクトルからセットを初期化して比較関数を提供するにはどうすればよいですか?

以下の最小限の例は、私がcompare関数wef_wrp_lt 'を使用しない限り動作します。

#include <functional> 
#include <set> 
#include <vector> 

template <class T> constexpr bool ref_wrp_lt(const std::reference_wrapper<T>&lhs, const std::reference_wrapper<T>&rhs) 
{ 
    return lhs.get() < rhs.get(); 
} 

class A 
{ 
}; 

int main() 
{ 
    std::vector<std::reference_wrapper<A>> my_vec = std::vector<std::reference_wrapper<A>>(); 
    std::set<std::reference_wrapper<A>, bool(*)(const std::reference_wrapper<A>&, const std::reference_wrapper<A>&)> my_set(my_vec.begin(), my_vec.end(), &ref_wrp_lt); 
    return 0; 
} 

しかし、私がそれを提供するとき、私はアロケータを提供しなければならないようです。これは事実ですか?はいの場合、どうすればデフォルトのアロケータをいつ使うことができますか?

P .:私はSTLとC++のオブジェクト指向プログラミングの初心者です。

+0

どのようなエラーメッセージが表示されますか? – bezet

答えて

0

例コードの欠落部分は、class Aoperator<です。それを追加する。次のようにコードをコンパイル可能にします。

class A 
{ 
    public: 
    bool operator<(const A &other) { 
     // TODO: add logic for comparison 
     return false; 
    } 
}; 
関連する問題