我有以下数据结构:
std::map<std::string,std::vector<std::map<std::string,std::vector<std::map<std::string,double> > > > >
因此,一个包含字符串作为键的映射,以及一个包含映射列表的值的映射,它将字符串作为键并将映射列表作为值。
有没有办法使用一个班轮插入数据。 (我不知道这种技术叫什么。
我的意思是在python中我能做到:
datas={"key":[{"key2":[{"key3":234}]}]}
我试过了:
ostokset.insert({ketju,{{kauppa,{{tuote,hinta}}}}});
但它不起作用。
答案 0 :(得分:5)
请不要这样做!这完全不可读且无法维护。
话虽如此,这是你问题的解决方案:
m["key1"] = {{{"key2", {{{"key3", 234.}}}}}};
为了达到这个解决方案,我基本上为每种类型创建了初始化器,从最里面(最简单)到最外面(最复杂):
std::map<std::string, double> map_x = {{"key3", 234.}};
std::vector<std::map<std::string, double>> v_x = {map_x};
std::map<std::string,
std::vector<std::map<std::string, double>>> map_y = {{"key2", v_x}};
std::vector<std::map<std::string,
std::vector<std::map<std::string, double>>>> v_y = {map_y};
然后开始通过用初始化替换每个变量来向后构建解决方案:
m["key1"] = v_y;
m["key1"] = {map_y};
m["key1"] = {{{"key2", v_x}}};
m["key1"] = {{{"key2", {map_x}}}};
m["key1"] = {{{"key2", {{{"key3", 234.}}}}}};
答案 1 :(得分:1)
你必须在std :: map
中考虑std :: pair的额外括号#include <cstdio>
#include <map>
#include <string>
#include <vector>
int main() {
std::pair<std::string, double> a{"s1", 1.0};
std::map<std::string, double> b{{"s2", 2.0}};
std::vector<std::map<std::string, double>> c{{{"s1", 3.0}}};
std::map<std::string, std::vector<std::map<std::string, double>>> d{
{"s2", {{{"s1", 4.0}}}}};
std::vector<
std::map<std::string, std::vector<std::map<std::string, double>>>>
e{{{"s2", {{{"s1", 5.0}}}}}};
std::map<std::string,
std::vector<std::map<std::string,
std::vector<std::map<std::string, double>>>>>
f{{"s3", {{{"s2", {{{"s1", 6.0}}}}}}}};
printf("%f\n", b["s2"]);
printf("%f\n", f["s3"][0]["s2"][0]["s1"]);
return 0;
}
至少使用C ++ 11进行编译。