如何初始化std :: map项的std :: vector?

时间:2016-04-08 19:35:06

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

我有以下内容:

#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:错误:没有用于初始化&#39; std :: vector&gt;&#39;的匹配构造函数(又名         &#39; vector,allocator&gt;,double&gt; &GT;&#39)       的std ::矢量&GT; data = {{&#34; close&#34;,14.4},{&#34; close&#34;,15.6}};

2 个答案:

答案 0 :(得分:5)

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

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

需要额外的大括号,因为std::map元素在您的案例std::pair<const key_type, value_type>中属于std::pair<const std::string, double>类型。因此,您需要一对额外的大括号来向编译器表示std::pair元素的初始化。

答案 1 :(得分:4)

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

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

这是查德所说的。