Конфликт std :: set и NTL :: vec_ZZ - PullRequest
3 голосов
/ 27 января 2012

Я пытаюсь использовать 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 Ответ

2 голосов
/ 27 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...