我有如下数据:

我需要在我的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这样的模板会是一条路吗?
发布于 2016-04-15 23:34:37
您提供的链接C++ std::map holding ANY type of value中接受的答案实际上是可行的。本质上,您需要一个变体映射--可以具有任何价值的对象,甚至另一个映射(这使您能够拥有多个索引,只是没有那么漂亮--例如,它可能类似于数据“foo”.asMap“bar”)。变体通常是带有暗示成员的高级联盟。
struct MyVariant {
int type; // or enum
union {
int asInt;
bool asBool;
double asDouble;
// etc...
std::map<std::string, MyVariant> asMap;
}
}; 但是,正如对引用问题的公认答案一样,您必须能够智能地处理与其他类型相结合的指针类型。您可以添加一个“标志”成员来表示内存的所有权(深度复制),而不是指向不属于变体(浅拷贝)的内存的指针。其中一种统一的类型可以是另一张地图,它将允许你创建一个任意深的结构。
https://stackoverflow.com/questions/36658140
复制相似问题