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

时间:2010-01-18 16:40:28

标签: java c++ boost hashmap

我有一个

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
    }
}

4 个答案:

答案 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; 
相关问题