我的数据表示如下:
我需要在我的C ++应用程序中访问这些数据。我还需要能够通过变量键名称以关联方式访问项目;例如:
std::string key = "ema50";
double value = data[key];
std::vector<std::map<std::string, double>>
对此非常有用,除了我不确定如何处理groups
项目。我希望能够访问向量中给定项目的testing
或validation
数组:
int testingGroups[9] = data["groups"]["testing"];
int validationGroups[9] = data["groups"]["validation"];
有没有办法可以做到这一点?我更喜欢使用矢量和地图,但只要我能以关联方式访问数据项,我就可以使用其他解决方案。
使用描述here之类的模板是否可行?
答案 0 :(得分:2)
您提供的链接C++ std::map holding ANY type of value中接受的答案实际上是要走的路。基本上你想要一个VARIANTs的地图 - 可以是任何值的对象,甚至是另一个地图(这使你能够拥有多个索引,只是不那么漂亮 - 例如它会像数据一样[ &#34;富&#34;。] asMap [&#34;杆&#34;])。变体通常是具有提示成员的花式联合,例如
struct MyVariant {
int type; // or enum
union {
int asInt;
bool asBool;
double asDouble;
// etc...
std::map<std::string, MyVariant> asMap;
}
};
但是在引用的问题的答案中,您必须能够智能地处理与其他类型结合的指针类型。您可以添加标记&#39;成员表示内存的所有权(深层副本),而不是指向不属于变体的内存的指针(浅层副本)。并且 - 其中一个联合类型可以是另一个允许您创建任意深度结构的映射。