我正在做一些金融交易工作。我有一组股票代码,但它们的模式非常清晰:
它由两个字符 AB
、AC
AD
和四位数字当前月份组成:1503
, 1504
,1505
。一些例子是:
AB1504
AB1505
AC1504
AC1505
AD1504
AD1505
....
由于这些字符串设计得很好,所以我想将每个字符串映射(散列)成一个唯一的整数,这样我就可以使用整数作为数组索引来快速访问,因为我在里面有很多检索我的系统和 std::unordered_map
或任何其他 HashMap 都不够快。我的测试表明,一般 HashMap 的延迟级别为百纳秒,而数组索引始终低于 100 纳秒。
我的理想情况是,例如,AB1504
映射到整数 1
、AB1505
映射到 2
....,然后我可以在里面创建一个数组来更快地访问与这些符号相关的信息。
我试图找出一些可以实现我的目标但无法找到的哈希算法或其他方法。
你们对这个问题有什么建议吗?
最佳答案
您可以将字符串视为可 rebase 数表示,并将其转换为整数。例如:
AC1504:
A (range: A-Z)
C (range: A-Z)
15 (range: 0-99)
04 (range: 1-12)
提取零件;那么哈希函数可以是
int part1, part2, part3, part4;
...
part1 -= 'A';
part2 -= 'A';
part4 -= 1;
return (((part1 * 26 + part2) * 100 + part3) * 12 + part4;
关于c++ - 如何将专用字符串映射到指定的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30289114/