使用mpz_t作为std::map的键
Using mpz_t as key for std::map
我正在尝试构建一个从mpz_t
键到uint
值的映射。我不知道为什么,但mpz_t
密钥在地图上找不到。
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"等的行,但这并没有发生。相反:
抛出"std::out_of_range"的实例后调用terminatewhat():映射::在
为了使mpz_t
在地图中可用,我还需要采取其他步骤吗?
似乎map
无法比较两个mpz_t
实例。
根据C++,参考映射被实现为二进制搜索树。因此,如果元素无法进行比较,则搜索是不可能的。
添加比较器修复了此问题:
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;
相关文章:
- 使用一个考虑到std::map中键值的滚动或换行的键
- 使用模板化的键类型定义 std::map,该键类型基于作为参数接收的函数
- 使用字符数组作为 Map 中的键
- 找不到最新插入到 std::map 中的键
- 插入 std::set 作为 std::map 的键
- 如何使用用户定义的键控制和修改 std::map 排序
- 如何在std::map中找到所有具有最大值C++的键
- 计算表达式字符串由 std::map 中的键组成
- C++类似于 std::map 的数据结构,具有多个键级别
- 为什么我可以将 std::map 的键传递给一个期望非常量的函数?
- 键:: MAP或类似数据结构中的键压缩
- 在std :: Map或std :: set中找到具有给定前缀的键的优雅方法
- 使用 std::vector 作为 std::map 的键在未找到和使用 reserve() 时不会返回 end()
- 使用mpz_t作为std::map的键
- 有没有一种方法可以使用类名作为std::map的键?
- 在map的map中查找值并返回主map的键(或替代键)
- 动态int *数组作为c++ map的键
- 在c++中迭代std::map的键/值
- 强制std::map的键类型不能为const
- 在 std::set 或 std::map 的键中使用weak_ptr是否安全