我有以下内容:
#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}};
答案 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}}};
这是查德所说的。