我的数据如下所示:
我需要在我的 C++ 应用程序中访问这些数据。我还需要能够通过变量键名称关联访问项目;例如:
std::string key = "ema50";
double value = data[key];
一个std::vector<std::map<std::string, double>>
对此会很棒,但我不知道该怎么处理 groups
元素。我希望能够访问testing
或validation
vector 中给定项目的数组:
int testingGroups[9] = data["groups"]["testing"];
int validationGroups[9] = data["groups"]["validation"];
有什么办法可以实现这一点吗?我确实更喜欢使用 vector 和 map ,但只要我可以关联访问数据项,我也愿意接受其他解决方案。
是否使用描述的模板 here是要走的路吗?
最佳答案
您提供的链接中接受的答案,C++ std::map holding ANY type of value ,实际上是要走的路。本质上你想要一个 VARIANT 的映射 - 可以是任何值的对象,甚至是另一个映射(它使你能够拥有多个索引,只是不那么漂亮 - 例如,它会像 data[ “foo”].asMap[“bar”])。变体通常是带有提示成员的奇特 union 体,例如
struct MyVariant {
int type; // or enum
union {
int asInt;
bool asBool;
double asDouble;
// etc...
std::map<std::string, MyVariant> asMap;
}
};
但正如所引用问题的已接受答案一样,您必须能够智能地处理与其他类型 union 的指针类型。您可以添加“flags”成员来表示内存的所有权(深复制),而不是指向不属于变体的内存的指针(浅复制)。并且 - union 类型之一可以是另一个映射,它允许您创建任意深度的结构。
关于c++ - 如何在 std::map 中存储混合类型项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36658140/