Конфликт СТД :: Набор и NTL :: Vec_zz
Вопрос
Я пытаюсь использовать STD :: Набор для произвольных целочисленных векторов, определенных из 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;
}
.
Кто-нибудь знает, почему первая вставка работает, а вторая нет?
Решение
std::set<T>
is ordered by std::less<T>
, which defaults to bool operator<(T,T)
. ZZ
does define a proper operator<
(they're ordered) but vec_ZZ
doesn't. In fact, most NTL classes don't, not even ZZ_p
. Therefore std::set<ZZ_p>
is equally invalid.
Не связан с StackOverflow