我有一个
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
}
}
答案 0 :(得分:1)
错误不适用于地图访问,而是适用于r[index]
。 index
必须是整数类型。
答案 1 :(得分:1)
与Java不同,C ++不为类提供散列函数。如果hashmap键的类型是整数或指针,那么C ++可以使用整数是它自己的哈希的事实,但它不能用于你自己定义的类型 - 在这种情况下你必须提供一个哈希功能明确。这可能很难有效地进行,这是哈希从原始C ++标准中排除而不是使用树结构而不是哈希表的地图的一个原因,并且只需要定义运算符&lt;(),这通常是比高效的哈希函数更容易编写。
我还会观察到,如果您使用指向节点的指针作为哈希键,那么将双值存储在节点本身中可能更容易,更快,而不是使用哈希表,因为您实际上已经拥有你要交的节点。
答案 2 :(得分:0)
它没有抱怨双重,它抱怨“some_node”。
您的地图具体定义为什么?
答案 3 :(得分:0)
你没有给出some_node的声明,但如果some_node不是指针,你会得到这个错误。双重应该没问题。
所以你可能需要这样的东西:
Node some_node;
...
map[&some_node] = some_double;