Conflict std::set and NTL::vec_ZZ

Conflict std::set and NTL::vec_ZZ

本文关键字:vec NTL ZZ and std set Conflict      更新时间:2023-10-16

我正在尝试为NTL库中定义的任意长度整数向量使用std::set,但由于某些原因,它不起作用。它与库定义的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>std::less<T>排序,默认为bool operator<(T,T)ZZ确实定义了一个合适的operator<(它们是有序的),但vec_ZZ没有。事实上,大多数NTL类都没有,甚至连ZZ_p都没有。因此std::set<ZZ_p>同样无效。