将数据插入到某种复杂的数据结构中 - C ++

时间:2018-02-13 13:57:53

标签: c++

我有以下数据结构:

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}}}}});

但它不起作用。

2 个答案:

答案 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进行编译。