如何初始化标准::映射项的向量

How can I initialize an std::vector of std::map items?

本文关键字:向量 映射 初始化 标准      更新时间:2023-10-16

>我有以下内容:

#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> data = {{"close", 14.4}, {"close", 15.6}};

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

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元素的初始化。

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

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

这是查德说的。