在C+中映射内部映射+; 我在C++中很难创建嵌套的映射。

在C+中映射内部映射+; 我在C++中很难创建嵌套的映射。,c++,dictionary,c++11,stdmap,C++,Dictionary,C++11,Stdmap,首先,我已经打字了 typedef std::map<std::variant<int, std::string>, std::variant<int, long long int, std::string>> SimpleDict; typedef std::map<std::variant<int, std::string>, std::variant<int, std::string,std::vector<SimpleDi

首先,我已经打字了

typedef std::map<std::variant<int, std::string>, std::variant<int, long long int, std::string>> SimpleDict;
typedef std::map<std::variant<int, std::string>, std::variant<int, std::string,std::vector<SimpleDict>,SimpleDict>> ComplexDict;

但是,
没有为'ComplexDic
初始化匹配的构造函数。即使为了简单起见,我将m的类型更改为
std::map
,也会得到相同的错误。我想我的语法有问题。您能帮忙吗?

在这两种情况下,您都缺少一组大括号来表示“顶级地图中的一对”:

可以通过显式命名类型来解决此问题:

ComplexDict m = {
    {
        "MAC0", SimpleDict {
            {"TAG0", "111001011000"},
            {"SEQ", "110000100100"},
            {"IOD", "0000"}
        }
    }
};

在这两种情况下,您都缺少一组大括号来表示“顶级映射中的一对”:

可以通过显式命名类型来解决此问题:

ComplexDict m = {
    {
        "MAC0", SimpleDict {
            {"TAG0", "111001011000"},
            {"SEQ", "110000100100"},
            {"IOD", "0000"}
        }
    }
};

什么是“MAC0”?也许你只是缺少了一套牙套。在您的示例中,应该使用单个元素初始化映射?您缺少一对括号:(表示外部映射的单个元素)。旁注:如果您试图使用自己的JSON解析器,我建议使用现有库之一。这是一项相当困难的任务。说明:内部
std::map
std::pair
s的形式存储其内容。如果要初始化映射,也需要提供这样的对:
ComplexDict m={std::pair(“MAC0”,{/*您的映射*/}})不需要显式指定该对,您可以再次从统一初始化中获益–这是通过额外的一对大括号完成的,正如前面的注释所示。不相关的,
std::variant
不符合C++11甚至C++14的标准。它是在C++17中引入的,所以这篇文章上的标签是有问题的。那是什么?也许你只是缺少了一套牙套。在您的示例中,应该使用单个元素初始化映射?您缺少一对括号:(表示外部映射的单个元素)。旁注:如果您试图使用自己的JSON解析器,我建议使用现有库之一。这是一项相当困难的任务。说明:内部
std::map
std::pair
s的形式存储其内容。如果要初始化映射,也需要提供这样的对:
ComplexDict m={std::pair(“MAC0”,{/*您的映射*/}})不需要显式指定该对,您可以再次从统一初始化中获益–这是通过额外的一对大括号完成的,正如前面的注释所示。不相关的,
std::variant
不符合C++11甚至C++14的标准。它是在C++17中引入的,因此这篇文章上的标签是值得怀疑的。
{
    {"TAG0", "111001011000"},
    {"SEQ", "110000100100"},
    {"IOD", "0000"}
}
ComplexDict m = {
    {
        "MAC0", SimpleDict {
            {"TAG0", "111001011000"},
            {"SEQ", "110000100100"},
            {"IOD", "0000"}
        }
    }
};