Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 存储修复消息的最佳数据结构是什么?_C++_Data Structures - Fatal编程技术网

C++ 存储修复消息的最佳数据结构是什么?

C++ 存储修复消息的最佳数据结构是什么?,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 在上面

为了便于访问,将以下消息存储到数据结构中的最佳方法是什么

“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或其他数据类型,如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帖子。谢谢你指出这一点。