在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"}
}
}
};