像数组一样访问std :: map的std :: map

时间:2014-04-22 08:51:15

标签: c++ c++11 stdmap

我初始化了一个std :: map的std :: map,如下所示:

static std::map<std::string, std::map<std::string, float>> _ScalingMapFrequency = {
            {"mHz",    {{"mHz",     1.0}}},
            {"mHz",    {{"Hz",      1e-3}}},

            {"Hz",     {{"mHz",     1e+3}}},
            {"Hz",     {{"Hz",      1.0}}}};

现在我试图通过以下方式访问浮点值:

std::cout<<"  the scaling factor is     :"<<_ScalingMapFrequency["mHz"]["Hz"];

编译和运行代码时没有问题,但我希望得到&#34; 1e-3&#34;相反,我总是得到一个&#34; 0&#34;。我需要访问std :: map&#34; _ScalingMapFrequency&#34;作为一个数组,这是设计决策。

我犯了什么错误?请给我一些指针,我将不胜感激。

1 个答案:

答案 0 :(得分:4)

地图不能有重复的键,因此当您第二次执行{"mHz", {{"Hz", 1e-3}}},时,它会覆盖第一个,而不是合并它们。

您应该更改构造函数,以便合并它们。

 {"mHz",    {{"mHz",     1.0}},
 {"mHz",    {{"Hz",      1e-3}},

应该成为

 {"mHz",    {{"mHz",     1.0},
            {"Hz",      1e-3}}},