我有一个std::map<mpz_class,int>
(对于那些不熟悉的,mpz_class
是一个非常大的整数的类容器,由 GMP,Gnu Multiprecision Library 定义)。我使用了一个使用 GMPcmp()
功能的自定义比较器。在地图中,我插入了几个std::pair<mpz_class,int>
正确的值(当我打印它们时它们是合理的)。
但是,我注意到map::find
工作不正常,所以我打印了 Comparator 正在比较的内容。事实证明,第二个元素(键)总是一个非常疯狂的整数值,比如 128957236027369832796823768439267,超出了我正在使用的整数的比例。
是否存在某种我不知道的内存损坏?也许mpz_class
不能以这种方式使用?我将如何解决这个问题?到目前为止,我还没有遇到其他容器的这个问题。
#include <map>
#include <gmpxx.h>
#include <iostream>
struct Equaler {
inline bool operator()(const mpz_class a, const mpz_class b) const {
std::cout << " about to return " << a << "," << b << "," << cmp(a,b) << "\n";
return cmp(a, b);
}
};
int main() {
mpz_class x("38268");
std::map<mpz_class,int,Equaler> map;
map.insert(std::pair<mpz_class,int>(x,42));
map.find(x);
return 0;
}
输出:
about to return 38268,812462232382732367817613904064203084469901797507,-2