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

时间:2016-04-15 22:58:18

标签: c++ dictionary stl stdmap

我的数据表示如下:

enter image description here

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

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

std::vector<std::map<std::string, double>>对此非常有用,除了我不确定如何处理groups项目。我希望能够访问向量中给定项目的testingvalidation数组:

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

有没有办法可以做到这一点?我更喜欢使用矢量和地图,但只要我能以关联方式访问数据项,我就可以使用其他解决方案。

使用描述here之类的模板是否可行?

1 个答案:

答案 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;成员表示内存的所有权(深层副本),而不是指向不属于变体的内存的指针(浅层副本)。并且 - 其中一个联合类型可以是另一个允许您创建任意深度结构的映射。