C++ 多键哈希表(无序映射)

C++ 多键哈希表(无序映射),c++,hashtable,key,unordered-map,C++,Hashtable,Key,Unordered Map,我需要使用多个键(int类型)来存储和检索哈希表中的单个值。我将使用多个键为单个项编制索引。我需要快速插入并查找哈希表。顺便说一下,我不允许在实现中使用Boost库 我该怎么做呢?最简单的方法可能是在列表中保留指向元素的指针/索引的映射 这里需要更多的细节,你需要支持删除吗?元素是如何设置的?您可以使用boost::共享指针吗?(如果需要支持删除,则非常有用) 我假设本例中的value对象很大,或者还有其他原因,您不能简单地在常规映射中复制值。如果您的意思是两个int组成一个键,那么无序映射。如

我需要使用多个键(int类型)来存储和检索哈希表中的单个值。我将使用多个键为单个项编制索引。我需要快速插入并查找哈希表。顺便说一下,我不允许在实现中使用Boost库


我该怎么做呢?

最简单的方法可能是在列表中保留指向元素的指针/索引的映射

这里需要更多的细节,你需要支持删除吗?元素是如何设置的?您可以使用boost::共享指针吗?(如果需要支持删除,则非常有用)


我假设本例中的value对象很大,或者还有其他原因,您不能简单地在常规映射中复制值。

如果您的意思是两个int组成一个键,那么
无序映射
。如果要通过多个键对同一组数据进行索引,请查看。

如果容器的键由多个
int
s的组合组成,则可以将其用作键,以封装
int
s,而无需您做更多工作。如果您的键
int
子组件的计数是固定的,则保持该状态。

如果它总是用于检索的组合

然后最好使用多个键形成一个复合键

你也可以这样做

  • 将密钥存储为int的串联字符串,如

     (int1,int2,int3) => data
    
  • 使用更高的数据类型,如uint64\u t,其中u可以添加单个值以形成键

    // Refer comment below for the approach
    

  • 当您说多个键时,您是指每个键必须单独索引同一项,还是指多个int一起用于索引单个项?(即,当您进行查找时,您是否提供一个或全部多个键?)。我会使用多个键来索引单个项目。谢谢你的回复。我已经更新了关于我不允许使用Boost库的问题。@Ashley-为什么不?如果没有升力,你将无法访问无序的地图。我认为我目前访问的无序地图是从GNU C++库中实现的。方法2是好的,为了更好的解释,请参见这个公式似乎不正确,它可能是(假设
    N
    是int的宽度,单位为位):
    ((int1)这不起作用。我试过了。它说:哈希不是专门用于这个的type@off99555如果你定义了一个自定义的散列函数,它就会工作,