我有一个
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/