我有一个包含大约一百万个条目的哈希图,键是一个字符串,其值来自5个不同的输入。 (字符串串联)每个输入的域很小,但是5个输入的组合给出了巨大的映射(500K个项)。现在,我正在考虑优化此结构。

我的想法是通过对每个单独的输入进行哈希并将该5个哈希组合为一个哈希(int 32或64)来哈希输入(5个输入的组合),然后查找该哈希。

我的问题是,是否存在可以很好地处理这种情况的已知数据结构?并值得进行优化吗?我想同时优化内存和运行时。

我正在使用C++std::unordered_map,关键是5个输入的组合字符串,输出是随机的。我没有发现输入和输出之间的任何关系(随机或串行)。

125 458 699 sadsadasd 5  => 56.
125 458 699 sadsadasd 3  => 57.
125 458 699 sadsadasd 4  => 58.
125 458 699 sadsadasd 5  => 25.
125 458 699 gsdfsds 3  => 89.

每个输入的域很小(第四个输入具有2K个不同的值,而其他输入只能具有约20个不同的值)。

最佳答案

您可以使用GNU perf为您的密钥生成完美的哈希函数。

关于c++ - HashMap实现优化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23616351/

10-11 00:38