【问题标题】:How can I initialize an std::vector of std::map items?如何初始化 std::map 项的 std::vector?
【发布时间】:2016-07-30 05:00:15
【问题描述】:

我有以下几点:

#include <vector>
#include <map>
#include <string>

int main() {
    std::vector<std::map<std::string, double>> data = {{"close", 14.4}, {"close", 15.6}};

    return 0;
}

当我尝试编译时,出现以下错误:

g++ -std=c++11 -Wall -pedantic ./test.cpp

./test.cpp:6:49: 错误:没有匹配的构造函数用于初始化“std::vector >”(又名 '向量,分配器>,双> >') std::vector> 数据 = {{"close", 14.4}, {"close", 15.6}};

【问题讨论】:

  • 尝试将 std::map 视为 std::pairs 的列表,试试这个:{ { {"close", 14.4} }, { {"close", 15.6} } }。包含 2 个映射的向量,每个映射有 1 对。
  • @Chad 答案属于答案框,而不是 cmets。
  • @Barry 完整的答案属于答案框。我不想写一个好的答案,所以我写了一个评论。
  • @Chad 如果您不想写答案,那就别写了。不要在你实际回答问题的地方采取这半步,但只是在错误的地方。
  • @Barry 我不同意,像“你试过了吗”这样的 cmets 很有价值,我会继续这样做。

标签: c++ c++11 dictionary vector stl


【解决方案1】:

每个元素/对都需要一对额外的大括号:

std::vector<std::map<std::string, double>> data = {{{"close", 14.4}}, {{"close", 15.6}}};
                                                    ^             ^    ^             ^

需要额外的一对大括号,因为 std::map 元素的类型为 std::pair&lt;const key_type, value_type&gt; 在您的情况下为 std::pair&lt;const std::string, double&gt;。因此,您需要一对额外的大括号来向编译器表示std::pair 元素的初始化。

【讨论】:

    【解决方案2】:

    使用 3 个大括号而不是 2 个。

    std::vector<std::map<std::string, double>> data = {{{"close", 14.4}}, {{"close", 15.6}}};
    

    乍得是这么说的。

    【讨论】:

      猜你喜欢
      • 2017-04-04
      • 2013-06-06
      • 2018-10-17
      • 1970-01-01
      • 2021-06-26
      • 2013-07-13
      • 2012-06-09
      • 1970-01-01
      • 2012-08-07
      相关资源
      最近更新 更多