c++ - 将长位数组映射到查找表

标签 c++ algorithm c++11

给定一组 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/

相关文章:

c++ - 如何重构逻辑以更好地处理错误?

algorithm - 汉诺塔的替代简单英语算法

c++ - 将 make_shared 与 shared_ptr<T> 一起使用仅对 T < 56 字节有益?

c++ - 检查 C++11 中的类型 #defines

java - 哪种查找重复整数的方法更有效?

c++ - MinGW 4.6.2 std::原子指针

c++ - 运算符 = 覆盖 c++

c++ - 我可以通过 QtService 编写(Windows 或 Linux)服务吗?

c# - 如何将包装器 DLL 连接到 API DLL 以便在 C# 项目中使用?

C# 字符串排列