如何解决在 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::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","0000"}
}
您可以通过显式命名类型来解决它:
ComplexDict m = {
{
"MAC0",SimpleDict {
{"TAG0","0000"}
}
}
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。