c++ - 如何将专用字符串映射到指定的整数

标签 c++ hash low-latency algorithmic-trading

我正在做一些金融交易工作。我有一组股票代码,但它们的模式非常清晰: 它由两个字符 ABAC AD 和四位数字当前月份组成:1503, 15041505。一些例子是:

AB1504
AB1505
AC1504
AC1505
AD1504
AD1505
....

由于这些字符串设计得很好,所以我想将每个字符串映射(散列)成一个唯一的整数,这样我就可以使用整数作为数组索引来快速访问,因为我在里面有很多检索我的系统和 std::unordered_map 或任何其他 HashMap 都不够快。我的测试表明,一般 HashMap 的延迟级别为百纳秒,而数组索引始终低于 100 纳秒。 我的理想情况是,例如,AB1504 映射到整数 1AB1505 映射到 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/

相关文章:

c++ - 如何使用 Windows 套接字查找 : number of bytes in output buffer pending send, 但尚未传输到电线上?

c++ - 在 C++ 中替代 mktime

c++ - 从一棵二叉树复制到另一棵

c++ - 创建没有图形的边缘描述符

ruby 性能 : Multi-key hashes

php - 如何从 php 数组生成唯一的字符串

Java TCP/IP 套接字性能问题

c++ - 为什么 Boost unordered_map 在第一次插入时花费太多时间?

c++ - 如何保存对象集合并在 C++ vector 中使用它们

javascript - jQuery Fancybox 和使用 location.hash 加载文件都不起作用