多键哈希表(unordered_map)
我需要使用多个键(int类型)来存储和检索哈希表中的单个值。我会使用多个键索引单个项目。我需要快速插入并查找散列表。顺便说一句,我不允许在实现中使用Boost库。多键哈希表(unordered_map)
我该怎么做?
谢谢。
最简单的方法可能是保留指向列表中元素的指针/索引映射。
虽然需要一些更多细节,但是您需要支持删除吗?元素如何设置?你可以使用boost :: shared指针吗? (相当有帮助,如果你需要支持删除)
我假设在这种情况下值对象很大,或者有一些其他原因,你不能简单地复制常规地图中的值。
如果你的意思是两个整数形成一个单一的密钥,然后unordered_map<std::pair<int,int>, value_type>
。如果您想通过多个键索引相同的一组数据,请查看Boost.MultiIndex。
如果它总是用于检索的组合。
然后它更好地使用多个密钥形成单个复合密钥。
你可以做到这一点无论
-
保存像是
(int1,int2,int3) => data
-
的关键是整数的一个连接字符串使用像uint64_t中更高的数据类型,其中以U可以添加单独的值以形成一把钥匙
// Refer comment below for the approach
方法#2很好,更好的解释请参见http://*.com/questions/3761914/storing-and-retrieving-multiple-keys-in-c/3762694#3762694;公式似乎是不正确的,它可能是(假设'N'是以位为单位的int宽度):'((int1 Arun 2010-09-25 19:50:24
当你说多个键时,你的意思是每个键都必须单独索引相同的项目,还是你的意思是多个整数都用于索引单个项目? (也就是说,当你做查找时,你是否提供了一个或所有的多个密钥?) – 2010-09-25 17:41:12
感谢您的快速回复。我会使用多个键索引单个项目。 – Ashley 2010-09-25 17:47:04