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