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