将以下消息存储到数据结构中以便于访问的最佳方法是什么?
“A = ABC,B = 156,F = 3,G = 1,H = 10,G = 2,H = 20,G = 3,H = 30,X = 23.50,Y = XYZ”
以上内容包括以下键/值对:
A = ABC
B = 156
F = 3
G = 1
H = 10
G = 2
H = 20
G = 3
H = 30
X = 23.50
Y = XYZ
棘手的部分是键F,G和H. F表示组中项目由G和H组成的项目数。
例如,如果F = 3,则此组中有三个项目: 项目1:G = 1,H = 10 项目2:G = 2,H = 20 项3:G = 3,H = 30
在上面的示例中,每个项目由两个键/对值组成:G和H.我希望数据结构具有灵活性,以便在项目增加其键/对值时可以处理。尽可能地,我想保持它在字符串中出现的顺序。
更新:我想将键/值对存储为字符串,即使该值经常显示为float或其他数据类型,如地图。
答案 0 :(得分:1)
可能不是您想要的,但我只是建议使用QuickFIX(quickfixengine.org),这是一个非常高质量的C ++ FIX库。它具有“FIX :: Message”类型,它可以完成您正在寻找的所有内容。我相信。
答案 1 :(得分:0)
我在Python和Perl中使用FIX很多,我倾向于使用字典或散列。您的密钥在邮件中应该是唯一的。对于C ++,您可以查看std :: map或STL扩展名std :: hash_map。
答案 2 :(得分:0)
如果您有必须支持的FIX消息的子集(大多数交换通常使用10-20种类型),您可以滚动自己的类来解析消息。如果你想要更通用,我建议创建类似FIXChunk类的东西。整个消息可以存储在此类中,组织成键及其值,以及重复组列表。每个重复组本身都是一个FIXChunk。
答案 3 :(得分:0)
一个简单的解决方案,但您可以使用std::multimap<std::string,std::string>
来存储数据。这允许您拥有具有相同值的多个键。
答案 4 :(得分:0)
根据我的经验,修复消息通常以其原始形式(作为字节流)存储,或者作为复杂的数据结构存储,提供可以处理其复杂性的完整API。毕竟,修复消息有时可以表示数据树。
后一解决方案的问题在于高速交易系统中的计算成本方面的转换是昂贵的。如果你正在建立一个交易系统,你可能更喜欢懒惰地计算修复消息的部分而不是你需要的,这无疑说起来容易做起来难。
我不熟悉高效的开源实现;像我工作的公司通常都有专有的实施方案。