在 C++ 中映射内部映射
map inside map in C++
我很难用 C++ 创建嵌套地图。
首先我已经定义了我的类型
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;
然后我定义我的地图:
ComplexDict m = {
"MAC0", {
{"TAG0", "111001011000"},
{"SEQ", "110000100100"},
{"IOD", "0000"}
}
};
但是我得到 No matching constructor for initialization of 'ComplexDic
。即使为了简单起见,我将 m 的类型更改为 std::map< std::string, std::map<std::string, std::string> >
,我也会得到同样的错误。我想我在语法上做错了什么。你能帮忙吗?
在这两种情况下,您都错过了一组大括号来表示“顶级映射中的一对”:
typedef std::map< std::string, std::map<std::string, std::string> > ComplexDict2;
ComplexDict2 m = {
{ //first pair of map
"MAC0", {
{"TAG0", "111001011000"},
{"SEQ", "110000100100"},
{"IOD", "0000"}
}
} //first pair end
};
对于变体的实际情况,编译器似乎混淆了这应该是什么类型:
{
{"TAG0", "111001011000"},
{"SEQ", "110000100100"},
{"IOD", "0000"}
}
您可以通过显式命名类型来解决它:
ComplexDict m = {
{
"MAC0", SimpleDict {
{"TAG0", "111001011000"},
{"SEQ", "110000100100"},
{"IOD", "0000"}
}
}
};
我很难用 C++ 创建嵌套地图。
首先我已经定义了我的类型
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;
然后我定义我的地图:
ComplexDict m = {
"MAC0", {
{"TAG0", "111001011000"},
{"SEQ", "110000100100"},
{"IOD", "0000"}
}
};
但是我得到 No matching constructor for initialization of 'ComplexDic
。即使为了简单起见,我将 m 的类型更改为 std::map< std::string, std::map<std::string, std::string> >
,我也会得到同样的错误。我想我在语法上做错了什么。你能帮忙吗?
在这两种情况下,您都错过了一组大括号来表示“顶级映射中的一对”:
typedef std::map< std::string, std::map<std::string, std::string> > ComplexDict2;
ComplexDict2 m = {
{ //first pair of map
"MAC0", {
{"TAG0", "111001011000"},
{"SEQ", "110000100100"},
{"IOD", "0000"}
}
} //first pair end
};
对于变体的实际情况,编译器似乎混淆了这应该是什么类型:
{
{"TAG0", "111001011000"},
{"SEQ", "110000100100"},
{"IOD", "0000"}
}
您可以通过显式命名类型来解决它:
ComplexDict m = {
{
"MAC0", SimpleDict {
{"TAG0", "111001011000"},
{"SEQ", "110000100100"},
{"IOD", "0000"}
}
}
};