【发布时间】:2012-08-11 02:02:19
【问题描述】:
我需要能够存储和查找通用字符串。我对字符串的内容了解不多,2/3 多一点是人类语言单词,其余的则更接近 UUID 或数字/字母组合。我知道任何特定的分组都是不变的(即,如果它有一些人类词,它将是所有人类词,如果它有一些 UUID,则所有内容都是 UUID 等)。
我需要决定是否应该将这些数据放在地图或哈希图中,以获得最佳的平均查找率。我倾向于使用 O(log n) 运行时说 map,因为当我对字符串的输入格式知之甚少时,我不相信我可以为字符串进行适当的有效散列。有什么想法会更好吗?
编辑: 我忘记了一个关键方面。我不知道字符串的长度,因此担心长字符串的内存使用量可能会增长过大。如果我使用散列方法,我会做一些事情,在 X 个字符之后,散列不会基于每个字符进行散列,以避免内存消耗太大。
我真正想要的是一个哈希映射实现,它可以将“桶”中的多个值按有序的方式排序,这样它就可以提供(log N)桶的搜索;但我认为 Stardrd C++ 中不存在它,也不值得从头开始编写。
pps。数据接近静态。我偶尔会不得不将它添加到列表中,这很罕见,我愿意接受缓慢的写入时间。我只关心查找时间。
【问题讨论】:
-
两者都试试,分析和比较?
标签: c++ string hash dictionary unordered-set