我有以下问题:一个值,可以与两个不同的键相关联。例子:
- 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;
};
但是,此解决方案使表中的项目数量增加了一倍。我有数亿个项目,我想将整个表保存在内存中,所以我问是否存在更高效的内存?