多个键哈希表(unordered_map)

时间:2010-09-25 17:32:30

标签: c++ hashtable key unordered-map

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

我怎么能这样做?

感谢。

4 个答案:

答案 0 :(得分:2)

如果您的意思是两个整数形成一个密钥,那么unordered_map<std::pair<int,int>, value_type>。如果要按多个键索引同一组数据,请查看Boost.MultiIndex

答案 1 :(得分:2)

如果您的容器的密钥由多个int的组合组成,您可以使用boost::tuple作为密钥来封装int,而无需更多工作。如果您修复了关键int子组件的计数,则保留此项。

答案 2 :(得分:1)

最简单的方法可能是将指针/索引的映射保存到列表中的元素。

此处还需要更多细节,您是否需要支持删除?如何设置元素?你能使用boost :: shared指针吗? (如果你需要支持删除,那将非常有帮助)

我假设在这种情况下值对象很大,或者有一些其他原因你不能简单地在常规地图中复制值。

答案 3 :(得分:0)

如果它总是成为检索的组合。

然后使用多个键更好地形成单个复合键。

你可以这样做

  1. 将密钥存储为类似

    的整数字符串
     (int1,int2,int3) => data
    
  2. 使用更高的数据类型,例如uint64_t,您可以在其中添加单个值以形成密钥

    // Refer comment below for the approach