我有一百万个ASCII字符串,没有重复,每个字符串最多7个字节长。我需要将每个字符串映射到一个正整数。这些整数中最大的整数应不超过一百万。尽管初始化可能很慢,但是查找应该很快:给定一个字符串,返回相应的int(或-1,如果找不到)。如何在C ++ 11中实现这一点?
一种解决方案:将字符串累积到std::unordered_map<string,int>
;中。然后在地图上进行迭代,并从递增计数器中分配整数。然后进行查找unordered_map::find("foo")->second
。但是,闻起来像其他一些容器会更快,开销也更少(内置索引,而不是手工编码)。也许unordered_set
和指针算术?
范围限制似乎使完美的哈希变得困难。
(int的范围受到限制,因为它索引到传递给svm_light的特征向量。该软件不使用稀疏存储,因此具有数万亿(大部分为零)元素的向量使它用尽了内存。因此,此字符串转换为- int预处理实现了稀疏的数据结构。)
您所描述的看起来像是完美的哈希。
有一些实现完美哈希的C ++库,例如用于C,C ++和Lua的Tiny完美哈希库。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句