C++ 存储修复消息的最佳数据结构是什么?
为了便于访问,将以下消息存储到数据结构中的最佳方法是什么 “A=abc,B=156,F=3,G=1,H=10,G=2,H=20,G=3,H=30,X=23.50,Y=xyz” 以上由以下键/值对组成: A=abcC++ 存储修复消息的最佳数据结构是什么?,c++,data-structures,C++,Data Structures,为了便于访问,将以下消息存储到数据结构中的最佳方法是什么 “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 在上面
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或其他数据类型,如map。我在Python和Perl中经常使用FIX,而且我倾向于使用字典或散列。您的密钥在消息中应该是唯一的。对于C++,您可以查看STD::MAP或STL扩展STD::HHASHMAP。 如果您必须支持修复消息的子集(大多数交换通常使用10-20种类型),那么您可以使用自己的类来解析消息。如果您想更通用一些,我建议您创建类似FIXChunk类的东西。整个消息可以存储在这个类中,组织成键及其值,以及重复组列表。每个重复组本身就是一个FIXChunk。是一个简单的解决方案,但您可以使用
std::multimap
来存储数据。这允许您拥有多个具有相同值的键。可能不是您要找的,但我只建议使用QuxFixFixFork(QueFixEngorn.org),这是一个非常高质量的C++固定库。它的类型是“FIX::Message”,我相信它可以完成您想要的所有功能。
根据我的经验,FIX消息通常以原始形式(以字节流的形式)存储,或者以复杂的数据结构存储,提供一个完整的API来处理它们的复杂性。毕竟,修复消息有时可以表示数据树 后一种解决方案的问题是,在高速交易系统中,转换的计算成本很高。如果您正在构建一个交易系统,那么您可能更愿意懒散地计算修复消息中超出您需要的部分,这说起来容易做起来难我不熟悉高效的开源实现;像我工作的公司通常都有专有的实现 我正在解析的消息实际上是一条修复协议消息。“您的密钥在消息中应该是唯一的。”-这不是真的。不仅可以在重复组中重复键,重复组本身也可以有可选键。这是一个好的观点,我应该更仔细地阅读OPs帖子。谢谢你指出这一点。