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?
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