【问题标题】:C++ Multidimensional string array initialization (std::map)C++ 多维字符串数组初始化 (std::map)
【发布时间】:2015-07-25 09:58:18
【问题描述】:

我在 c++ 中有这个特殊的字符串数组:

#include <map>
#include <string>

std::map<std::string, std::map<int, std::string>> oParam;
oParam["pA"][0] = "a";
oParam["pA"][1] = "b";
oParam["pA"][2] = "c";
oParam["pB"][0] = "x";
oParam["pB"][1] = "y";
oParam["pB"][2] = "z";

但我想用初始化列表对其进行初始化,如下所示:

std::map<std::string, std::map<int, std::string>> oParam{
    { "pA", { "a", "b", "c" } },
    { "pB", { "x", "y", "z" } },
};

但这给了我一个错误。我是否缺少一些括号?

【问题讨论】:

    标签: c++ string multidimensional-array


    【解决方案1】:

    如果在内部映射中充当键的整数是连续的,则可以只使用向量:

    std::map<std::string, std::vector<std::string>> oParam;
    

    这样,你给出的初始化应该可以工作了。

    如果您继续使用std::map,则需要做几件事。首先,它支持稀疏键,因此您需要为要插入的每个字符串指定键。其次,您需要将要插入到一张地图中的所有项目用大括号括起来,如下所示:

    std::map<std::string, std::map<int, std::string>> oParam {
        { "pA", { { 0, "a" }, { 1, "b" }, { 2, "c" } } },
        { "pB", { { 0, "x" }, { 1, "y" }, { 2, "z" } } }
    };
    

    【讨论】:

    • 感谢矢量解决方案!
    猜你喜欢
    • 2011-01-05
    • 1970-01-01
    • 2016-05-08
    • 2011-04-03
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    相关资源
    最近更新 更多