【问题标题】:Build Map With For Loop使用 For 循环构建地图
【发布时间】:2016-10-06 20:42:42
【问题描述】:

我正在尝试将值添加到采用 int 键和 char 值的映射变量。该映射将包含字母表中字母的位置,以及该位置对应的字母。出于某种原因,我从 for 循环内的 .insert() 部分收到错误。

map<int, char> cipher;

for (int i = 0; i < 26; i++)
{
    cipher.insert(i, char(97 + i));
}

【问题讨论】:

    标签: c++ loops dictionary


    【解决方案1】:

    以下是使用地图时的正确语法:

    for (int i = 0; i < 26; i++)
    {
        cipher[i] = char(97 + i);
    }
    
    //To use it
    std::cout << cipher[letterindex] << std::endl;
    

    【讨论】:

      【解决方案2】:

      我会做的略有不同:

      我将使用map::emplace 代替,因为它将一个新元素插入到容器中,该容器使用给定的 args 就地构造(如果它不存在的话),并尽可能避免不必要的复制或移动操作。

      for (int i = 0; i < 26; i++)
      {
          cipher.emplace(i, char(97 + i));
      }
      

      试试看 -> https://ideone.com/pKf99l

      http://en.cppreference.com/w/cpp/container/map/emplace

      【讨论】:

        【解决方案3】:

        你应该使用std::make_pair:

        for (int i = 0; i < 26; i++)
        {
            cipher.insert(std::make_pair(i, char(97 + i)));
        }
        

        更多细节在这里:

        http://en.cppreference.com/w/cpp/container/map/insert http://en.cppreference.com/w/cpp/utility/pair/make_pair

        问题是insert 函数没有重载,它们采用单独的键/值参数。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-06-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多