2016-04-01 1 views
0

私はセットのベクトルを定義し、セットのcompare関数を定義したいと思う。setがvectorの要素であるときにset compare関数を定義する

私はこのように、セットの比較関数を定義する方法を知っている:

bool isSmall(const std::pair<int, int> &i1, const std::pair<int, int> &i2) 
{ 
    return i1.second < i2.second; 
} 
std::set<std::pair<int, int>, decltype(isSmall)*> set_int(isSmall); 

しかし、どのような場合、私はベクトルを持っている、とベクトル要素は私の自己定義された一連のですか?

std::vector< std::set<std::pair<int, int>, decltype(isSmall)*> > vec_set 

Iはvec_setを挿入するので、これは< 1,1のような[0]別の同じ要素、corretない>(< 1,1>はvec_setに挿入されている[0])プログラムは、その後、ダウンクラッシュ。

私はset_int(isSmall)のようなことをする必要があるようですが、上記のようにこのセットを含むベクトルを定義するとどうすればいいですか?

+0

あなたは何を達成しようとしていますか? – Zereges

+0

あなたが見ることができるように、私はベクトルを持っています、そして、このベクトルの要素は私の自己定義セットです、その要素のペアはです。私が独自の比較関数を定義しなければならないので、デフォルトのランクルールはセットの両方のint番号に基づいてセットをランク付けするため、セットの要素のランクをの第2のint番号に従って設定したいと考えています。セットを定義するときにこのcompare関数を使用してください。 – Yan

+0

と私は今それをやる方法を知っています、ちょうどQwabbelbellyが言うように。 – Yan

答えて

0

おそらくisSmallをコンパレータとして割り当てないでください。 (テンプレート引数はちょうどそれのタイプを指定します)

using T = std::pair<int, int>; 

bool isSmall(T const & i1, T const & i2) 
{ 
    return i1.second < i2.second; 
} 

void main() 
{ 
    typedef bool(*CompareFunc)(T const &, T const &); // decltype(isSmall)* 

    std::vector< std::set<T, CompareFunc> > vec_set; 

    vec_set.push_back(std::set<T, CompareFunc>(isSmall)); // <-- assign the function in every set<>-constructor manually 
    vec_set[0].insert({ 1,1 }); 
    vec_set[0].insert({ 1,1 }); 
} 

あなたはまた、代わりの機能のファンクタを使用することができます。

struct CompareFunc // : public std::binary_function<T, T, bool> 
{ 
    bool operator()(T const &i1, T const &i2) const 
    { 
     return i1.second < i2.second; 
    } 
}; 

void main() 
{ 
    std::vector< std::set<T, CompareFunc> > vec_set; 

    vec_set.resize(1); // <-- comparator gets instantiated automatically 
    vec_set[0].insert({ 1,1 }); 
    vec_set[0].insert({ 1,1 }); 
} 

も参照してください:http://en.cppreference.com/w/cpp/concept/Compare

+0

まあ、私は考えを得た。私はそれを試して、今私が逃したものを知っている。どうもありがとう!!! – Yan

+0

あなたは大歓迎です。答えを受け入れることを検討してください。 – Qwabbelbelly

関連する問題