首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将混合类型的项存储在std::map中?

如何将混合类型的项存储在std::map中?
EN

Stack Overflow用户
提问于 2016-04-15 22:58:17
回答 1查看 1.2K关注 0票数 2

我有如下数据:

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

代码语言:javascript
复制
std::string key = "ema50";
double value = data[key];

对于这一点,一个std::vector<std::map<std::string, double>>是很好的,但我不知道如何处理groups项目。我希望能够访问向量中给定项的testingvalidation数组:

代码语言:javascript
复制
int testingGroups[9] = data["groups"]["testing"];
int validationGroups[9] = data["groups"]["validation"];

我有办法做到这一点吗?我确实更喜欢使用向量和地图,但只要我能够关联地访问数据项,我就愿意使用其他解决方案。

使用像描述的here这样的模板会是一条路吗?

EN

回答 1

Stack Overflow用户

发布于 2016-04-15 23:34:37

您提供的链接C++ std::map holding ANY type of value中接受的答案实际上是可行的。本质上,您需要一个变体映射--可以具有任何价值的对象,甚至另一个映射(这使您能够拥有多个索引,只是没有那么漂亮--例如,它可能类似于数据“foo”.asMap“bar”)。变体通常是带有暗示成员的高级联盟。

代码语言:javascript
复制
struct MyVariant {
    int type; // or enum
    union {
        int asInt;
        bool asBool;
        double asDouble;
        // etc...
        std::map<std::string, MyVariant> asMap;
    }
};        

但是,正如对引用问题的公认答案一样,您必须能够智能地处理与其他类型相结合的指针类型。您可以添加一个“标志”成员来表示内存的所有权(深度复制),而不是指向不属于变体(浅拷贝)的内存的指针。其中一种统一的类型可以是另一张地图,它将允许你创建一个任意深的结构。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36658140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档