2012-01-27 1 views
3

NTLライブラリから定義された任意の長さの整数ベクトルにstd :: setを使用しようとしていますが、何らかの理由でそれが動作しません。これは、ライブラリで定義されたZZ整数で完全に正常に動作します:最初の挿入作品と第二がない理由std :: setとNTL :: vec_ZZを黙認します

#include <NTL/ZZ.h> 
#include <NTL/vec_ZZ.h> 
#include <set> 

NTL_CLIENT 

int main(void){ 


    std::set<ZZ> foo; 
    foo.insert(to_ZZ(1)); //works without problems 

    std::set<vec_ZZ> vectorFoo; 
    vec_ZZ vec; 
    vectorFoo.insert(vec); //causes compiler to crash 

    return 0; 
} 

は誰でも知っていますか? ありがとう

+0

標準ライブラリのコンテナには、通常、コピー可能な構成要素と割り当て可能な要素がありますが、使用するライブラリの場合と同じであるかどうかはわかりませんが、2番目の使用方法がこの規則に従わないようです。 –

+0

ああ、そうかもしれない。リストやベクトルでvec_ZZを使うことができます。ちょうどセットではありません.... –

+0

コンパイラがクラッシュしますか?エラーメッセージはありますか?私はvec_ZZが比較演算子を定義する必要があると思います。 –

答えて

2

std::set<T>の順番はstd::less<T>です。デフォルトはbool operator<(T,T)です。 ZZは適切なoperator<を定義していますが(注文されていますが)vec_ZZはありません。実際、ほとんどのNTLクラスは、ZZ_pさえしません。したがって、std::set<ZZ_p>も同様に無効です。

関連する問題