gpt4 book ai didi

c++ - 使用 mpz_t 作为 std::map 的键

转载 作者:太空宇宙 更新时间:2023-11-04 11:51:37 24 4
gpt4 key购买 nike

我正在尝试构建从 mpz_t 键到 uint 值的映射。我不知道为什么 mpz_t 键无法在 map 中查找。

mpz_t leftSideValues[1 << 20];

int main()
{
std::map<mpz_t, uint> leftSide;

for (uint i = 0; i < 1 << 20; i++)
{
mpz_init(leftSideValues[i]);

// compute some stuff here...

// now save the computed value to our map
leftSide[leftSideValues[i]] = i;

// do a lookup to see whether our value can be found
std::cout << leftSide.at(leftSideValues[i]) << " -- " << i << std::endl;
}

return 0;
}

预期的输出会是很多行,看起来像“0 -- 0”、“1 -- 1”等等,但那并没有发生。相反:

terminate called after throwing an instance of 'std::out_of_range'  what():  map::at

是否需要采取其他一些步骤才能使 mpz_t 在 map 中可用?

最佳答案

map 似乎无法比较两个 mpz_t 实例。

根据 the C++ reference map 被实现为二叉搜索树。因此,如果不能比较元素,则搜索是不可能的。

添加比较器解决了这个问题:

struct mpzCompare
{
bool operator() (const mpz_t val1, const mpz_t val2) const
{
return mpz_cmp(val1, val2) > 0;
}
};

std::map<mpz_t, uint, mpzCompare> leftSide;

关于c++ - 使用 mpz_t 作为 std::map 的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17971775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com