gpt4 book ai didi

java - Boost unordered_map 是否仅适用于将项目与整数相关联?

转载 作者:行者123 更新时间:2023-11-28 03:58:38 25 4
gpt4 key购买 nike

我有一个

HashMap<Node, Double> 

在 Java 中,稍后我将使用它来检索与节点关联的 double 值。我试过了

boost::unordered_map<Node*, double> 

但是当我尝试在其中放入一些内容时,出现“错误 C2108:下标不是整数类型”,例如:

map[some_node] = some_double;

如果我正确地解释了错误,那么我必须用一个 int 替换我的 double。有解决这个问题的简单方法吗?

好的,下面是函数:

void myClass::someFunction(const double* r)
{
//map is boost::unordered_map<Node*, double>
//nodes is a pointer to std::vector<Node*>
std::vector<Node*>::iterator it;
for(it = nodes->begin(); it != nodes->end(); it++)
{
//calculate the index
map[*it] = r[index]; //error
}
}

最佳答案

与 Java 不同,C++ 不为类提供散列函数。如果 hashmap 键的类型是一个整数或一个指针,那么 C++ 可以使用一个整数是它自己的散列这一事实,但它不能为你自己定义的类型提供这一点——在那种情况下你必须提供一个散列明确地发挥作用。这可能很难有效地做到,这是哈希被排除在原始 C++ 标准之外的原因之一,支持使用树结构而不是哈希表的映射,并且只需要定义 operator<() ,这通常是比高效的哈希函数更容易编写。

我还观察到,如果您使用指向节点的指针作为散列键,那么将 double 值存储在节点本身中可能会更容易、更快捷,而不是使用散列表,因为您实际上已经有了您要传递的节点。

关于java - Boost unordered_map 是否仅适用于将项目与整数相关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2087593/

25 4 0
文章推荐: html - 如何更改
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com