gpt4 book ai didi

c++ - 如何在 std::map 中存储混合类型的项目?

转载 作者:搜寻专家 更新时间:2023-10-31 02:16:42 50 4
gpt4 key购买 nike

我的数据表示如下:

enter image description here

我需要在我的 C++ 应用程序中访问这些数据。我还需要能够通过可变键名关联访问项目;例如:

std::string key = "ema50";
double value = data[key];

A std::vector<std::map<std::string, double>>这会很好,除非我不确定如何处理 groups元素。我希望能够访问 testingvalidation vector 中给定项目的数组:

int testingGroups[9] = data["groups"]["testing"];
int validationGroups[9] = data["groups"]["validation"];

有什么办法可以实现吗?我确实更喜欢使用 vector 和 map ,但我对其他解决方案持开放态度,只要我可以关联访问数据项即可。

是否会使用描述的模板 here是要走的路吗?

最佳答案

您提供的链接中接受的答案,C++ std::map holding ANY type of value ,实际上是要走的路。本质上你想要一个 VARIANTs 的映射 - 可以是任何值的对象,甚至是另一个映射(它使你能够拥有多个索引,只是不那么漂亮 - 例如它会像数据[ "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 的指针类型。您可以添加一个“标志”成员来表示内存的所有权(深拷贝),而不是指向不属于变体(浅拷贝)的内存的指针。并且 - union 类型之一可以是另一个映射,它允许您创建任意深度的结构。

关于c++ - 如何在 std::map 中存储混合类型的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36658140/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com