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

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

最佳答案

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

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

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

相关文章:

java - Bootstrap 和 CSS 格式不显示 JSP

java - 如何使用 Spring 数据快速添加/删除多对多关系中的对象

c++ - Static Float 变量仅存储分配的最高值;需要它来存储最近的

c++ - boost::detail::addr_impl_ref 的目的是什么?

c++ - 如何在相关数据结构中存储 JSON 键值(我用 cpp boost 解析过)?

java - sun.misc.Service 的替换类

java - AEADBadTagException : Input too short - need tag. 如何传递标签?

c++ - Visual Studio C++ 2k15 - 指针地址出错

c++ - 使用设备文件符号链接(symbolic link)查找总线号和设备号

c++ - 试图解析分块传输编码,但它不起作用,我解码的文件完全不可读