Question

I am trying to use std::set for arbitrary-length integer vectors defined from the NTL-Library and for some reason it doesn't work. It works totally fine with the ZZ integers defined by the library:

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

Does anyone know why the first insertion works and the second doesn't?

Was it helpful?

Solution

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top