c++哈希表,其中键是字符串,值是字符串的向量

c++ hashtable where keys are strings and values are vectors of strings

本文关键字:字符串 向量 哈希表 c++      更新时间:2023-10-16

我有一个庞大的唯一字符串集合(大约500k)。每个字符串都与一个字符串向量相关联。我目前正在中存储这些数据

map<string, vector<string> >

而且运行良好。然而,我希望对地图的查找比log(n)更快。在这些受限的情况下,我如何创建一个支持O(1)查找的哈希表?看来这应该是可能的,因为我提前知道了所有的钥匙。。。并且所有的密钥都是唯一的(所以我不必考虑冲突)。

干杯!

您可以使用boost::unordered_mapstd::tr1::unordered_map或(在C++0x编译器上)std::unordered_map创建哈希表。这几乎不需要付出任何努力。谷歌稀疏处理可能更快,而且占用的内存更少。(删除可能很痛苦,但似乎你不需要。)

如果代码仍然不够快,您可以像其他人所建议的那样,利用密钥的先验知识和最小的完美哈希来获得有保证的O(1)性能。代码生成工作是否值得取决于您;将500k个密钥放入像gperf这样的工具中可能需要代码生成器生成器。

您可能还想看看CMPH,它在运行时生成一个完美的哈希函数,尽管是通过C API。

我想为您的表创建一个完美哈希函数。这将保证不会发生冲突,而冲突是解决成本高昂的操作。完美散列函数生成器也可用。

您想要的是一个完美哈希。gperf通常用于生成这些字符串,但我不知道它在处理如此大的字符串集合时效果如何。

如果您希望一个已知的密钥集合不发生冲突,那么您正在寻找一个完美的哈希。CMPH库(我很抱歉,因为它是针对C而不是C++的)是成熟的,可以为相当大的数据集生成最小的完美哈希。