【问题标题】:Is it possible to initialize a std::map with n keys, where n is predefined?是否可以使用 n 个键初始化 std::map,其中 n 是预定义的?
【发布时间】:2015-06-02 13:10:59
【问题描述】:

我想知道是否可以用n key:value 元素初始化std::map,其中n 是预定义的(类似于数组初始化:array[n])。

我不知道std::map 存在这样的构造函数,但我想我可以问一下以防万一。

另外一个人可以做的是:

#include <iostream>
#include <map>

int main()
{
   int n = 5;
   std::map<int,double> randomMap;

   for(int i = 0; i < n; ++i)
   {
       randomMap.insert({i,0.9});
   }

   for(auto j: randomMap)
   {
       std::cout<<"key: " << j.first <<"\tvalue: " << j.second << std::endl;
   }

   return 0;
}

【问题讨论】:

  • 初始化列表构造函数
  • 如果您正在寻找像 std::map&lt;int, double&gt; randomMap(5, 0.9); 这样的东西,那不存在。
  • @black 对于这样的构造函数,您希望每个元素的键是什么?如果键是某个用户定义的类而不仅仅是数字原语怎么办?
  • @black 也可以check a reference 看看标准没有规定这样的构造函数。
  • @CoryKramer 是的,你绝对是对的。我会读它,就好像它周围有花括号,这会让它完全没问题。

标签: c++ stdmap


【解决方案1】:

当然,你可以使用初始化列表,例如

int main()
{
    std::map<int, double> randomMap {{0, 1.5}, {3, 2.7}, {9, 1.9}};
    for (auto const& element : randomMap)
    {
        std::cout << "key: " << element.first << " value: " << element.second << std::endl;
    }
}

Output

key: 0 value: 1.5
key: 3 value: 2.7
key: 9 value: 1.9

【讨论】:

  • 我认为值得指出的是,它从 C++11 开始就可用。
  • 当然,但是 OP 已经在使用 auto,因此可以公平地假设他们已经在使用具有 C++11 的编译器。也是 2015 年,我希望大多数人至少在使用 C++11,或者如果他们不是,他们应该在他们的问题中特别提到它。
猜你喜欢
  • 2013-08-24
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-11
  • 2020-09-03
  • 2021-11-17
相关资源
最近更新 更多