给定一组 n (n < 1000) 个长度为 l (l > 64) 的唯一位数组(例如 c++ std::bitset 类模板),这是在查找表中存储此类位数组的最佳映射L 包含从 0 到 n-1 的元素,如何最快找到它们?
我想要实现的目标如下:
L["000010001 ... 00101010"] = 0
L["111000000 ... 01000100"] = 1
...
L["001101100 ... 01010111"] = n-1
如果转换为十进制,位数组是无序的。
我目前正在使用std::unordered_map<std::bitset<81>, int>
和 std::unordered_map::find但我有一种感觉,有一种更快的方法可以做到这一点。
最佳答案
std::unordered_map
具有强大的优势:它存在、经过广泛测试并且经过优化。
我能想到的唯一替代方案是在成对数组(bit_pattern,索引)中进行二分搜索:对于大小 < 1000 的数组,需要少于 10 次比较。
但是...需要代码、测试和基准...
我现在的白发告诉我:如果它已经存在并且满足你的需求,那么就使用它
关于c++ - 将长位数组映射到查找表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51443215/