Конфликт std::set и NTL::vec_ZZ

Я пытаюсь использовать std::set для целочисленных векторов произвольной длины, определенных из библиотеки NTL, и по какой-то причине это не работает. Он прекрасно работает с целыми числами 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;
}

Кто-нибудь знает, почему первая вставка работает, а вторая нет?

1 ответ

Решение

std::set<T> заказано std::less<T>, который по умолчанию bool operator<(T,T), ZZ действительно определяет правильное operator< (они заказаны) но vec_ZZ не делает. На самом деле, большинство классов NTL этого не делают, даже ZZ_p, Следовательно std::set<ZZ_p> в равной степени недействительным.

Другие вопросы по тегам