3

我正在尝试将 std::set 用于从 NTL-Library 定义的任意长度整数向量,但由于某种原因它不起作用。它完全适用于库定义的 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;
}

有谁知道为什么第一次插入有效而第二次无效?

4

1 回答 1

2

std::set<T>按 排序std::less<T>,默认为bool operator<(T,T)ZZ确实定义了一个正确的operator<(它们是有序的)但vec_ZZ没有。事实上,大多数 NTL 类都没有,甚至ZZ_p. 因此std::set<ZZ_p>同样无效。

于 2012-01-27T14:05:04.590 回答