Pergunta

Estou tentando usar std::set arbitrária de comprimento inteiro vetores definidos a partir da NTL-Biblioteca e, por algum motivo, ele não funciona.Ele funciona muito bem com o ZZ inteiros definidos pela biblioteca:

#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;
}

Alguém sabe por que o primeiro funciona a inserção e o segundo não?

Foi útil?

Solução

std::set<T> é ordenado por std::less<T>, que assume a bool operator<(T,T). ZZ definir uma adequada operator< (eles estão ordenados), mas vec_ZZ não.Na verdade, a maioria NTL classes não, não mesmo ZZ_p.Portanto, std::set<ZZ_p> é igualmente inválido.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top