【问题标题】:C++11 Nested Map with List-Initialization具有列表初始化的 C++11 嵌套映射
【发布时间】:2014-07-16 14:18:33
【问题描述】:

我有一个嵌套映射,即map<int, map<int, string>>,我想用初始化列表进行初始化。我可以使用初始化列表来初始化单级映射,但似乎无法找出嵌套映射的正确语法。有可能吗?

MWE:

// This example shows how to initialize some maps
// Compile with this command:
//      clang++ -std=c++11 -stdlib=libc++ map_initialization.cpp -o map_initialization

#include <iostream>
#include <map>
#include <string>

using namespace std;

int main(){
    cout << "\nLearning map initialization.\n" << endl;

    map<int, string> level1map = {
        {1, "a"},
        {2, "b"},
        {3, "c"}
    };

    for (auto& key_value : level1map) {
        cout << "key: " << key_value.first << ", value=" << key_value.second << endl;
    }

//  This section doesn't compile
//  map<int, map<int, string>> level2map = {
//      {0,
//          {0, "zero"},
//          {1, "one"},
//          {2, "two"}
//      },

//      {1,
//          {0, "ZERO"},
//          {1, "ONE"},
//          {2, "TWO"}
//      }
//  };

    return 0;
}

【问题讨论】:

    标签: c++ c++11 map initialization initializer-list


    【解决方案1】:

    您只是在内部地图内容周围缺少一对大括号:

    map<int, map<int, string>> level2map = {
        {0, {
            {0, "zero"},
            {1, "one"},
            {2, "two"}
        }},
    
        {1, {
            {0, "ZERO"},
            {1, "ONE"},
            {2, "TWO"}
        }}
    };
    

    如果你把它写在一行中,也许会更明显。四样东西的清单:

    {0, {0, "zero"}, {1, "one"}, {2, "two"}}
    

    对比2 件事的列表,其中第 2 件事是 3 件事的列表:

    {0, {{0, "zero"}, {1, "one"}, {2, "two"}}}
    

    【讨论】:

      【解决方案2】:
      map<int, map<int, string>> level2map = {
              { 0,
              { { 0, "zero" },
              { 1, "one" },
              { 2, "two" } }
              },
      
              { 1,
              { { 0, "ZERO" },
              { 1, "ONE" },
              { 2, "TWO" } }
              }
      };
      

      【讨论】:

        【解决方案3】:

        您只是缺少第一对的第二个值的 {}:

        map<int, map<int, string>> level2map = {
          {0, {
                  {0, "zero"},
                  {1, "one"},
                  {2, "two"}
              }
          },
        
          {1, {
                  {0, "ZERO"},
                  {1, "ONE"},
                  {2, "TWO"}
              }
          }
        };
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-07-01
          • 1970-01-01
          • 2018-11-06
          • 2021-06-22
          • 1970-01-01
          • 2017-05-03
          • 2020-03-06
          相关资源
          最近更新 更多