【发布时间】:2013-08-21 20:45:35
【问题描述】:
我有以下问题:一个值,可以与两个不同的键相关联。示例:
- uint64 key1 -> 值
- uint32 key2 -> 值
所以一个查询可以是双重的:
table.find(uint64 key1) 或
table.find(uint32 key2)
key1 和 key2 是完全独立的。 是否有可能实现一个通过两个键访问而不复制项目的表?
一种可能的解决方案(psedocode):
class TwoKeyHashTable {
Value find(uint64);
Value find(uint32);
insert(key1, key2, value) {
insert_into_table(key1, value);
insert_into_table(key2, value);
}
struct Item {
uint64 key1;
uint32 key2;
Value value;
} *table;
};
但是,此解决方案使表格中的项目数量增加了一倍。我有数亿个项目,我想将整个表保存在内存中,所以我想问是否存在更高效的内存?
【问题讨论】:
-
欢迎来到 SO!您正在谈论实现此数据结构,但没有说明您愿意使用哪种或多种语言。还要考虑到数以亿计的项目可能无法一次全部放入内存中。
-
C++。我已经实现了 10 多个专门的哈希表,所以我不会遇到低级实现的问题。只是想法或算法就足够了...... :-)
-
请出示您的密码。你不太可能通过这种方式得到答案。
-
我不明白你的意思......我很清楚地指定了上面课程的问题和要求。我实现的哈希表与我的问题完全无关。我只想强调,我在实现方面有相当多的经验,我在这里寻求的是算法和想法。谢谢。