C ++利用struct的嵌套数据结构

时间:2018-02-18 10:29:25

标签: c++ data-structures struct nested

因此,我试图想出一个简单的数据结构,这个数据结构将包含连锁店,商店位置以及产品和产品。他们的价格。

我想尝试的解决方案是关注,但因为我忘记了C ++不支持动态命名,所以它不起作用。我可以以某种方式将这种逻辑改变成C ++可以处理的东西吗?

包含我想保存到我的数据结构的数据的示例向量类似于

{"chain_nameX", "location_nameX", "product_nameX", product_priceX}

其中前3个条目是字符串,最后一个条目是int或字符串(如果产品缺货,它将没有价格值,而是字符串)。

已经将此结构用于我的数据结构,但由于无法使用动态命名,我对于什么是自然解决方案感到有点迷失。

struct Product {
    string productname;
    double price;
};

这是我创建的用于在向量中包含商店位置和来自上面结构的产品数据的结构,但我想利用动态命名,所以我不确定这是否真的是一种接近它的好方法

struct Shop {
    string shop_location;
    vector <Product> shop_locations;
};

所以,我想通过这样的逻辑开始存储数据:

    Shop word_segments[1];

但是因为动态命名实际上不是C ++中的东西,所以它不起作用。有没有像这样制定数据结构的平滑解决方案?

另外,我强制使用预先确定的结构Product,但是产品不是一种冗余的结构吗?如果我通过商店位置调用它,那么限制将只是一个产品,如果我按产品名称调用它,那么为什么它中包含productname字符串?

编辑: 如果我只是将结构数据结构命名为集合名称并将它们保存到向量/其他数据结构中,那么当我为数据结构的其他部分重命名它们的元素或它们的值是否会全局更改时它们是否会保持不变? (让我知道这听起来有点混乱,我会举一个例子来说明我的意思)

Edit2:根据建议

Product product;
    product.productname = word_segments[2];
    product.price = price;

    Shop shop;
    shop.products.push_back(product);
    shop.shop_location = word_segments[1];

    ShopChain shopchain;
    shopchain.name = word_segments[0];
    shopchain.shops.push_back(shop);

    chains[word_segments[0]].push_back(shopchain);

    all_possible_products.push_back(word_segments[2]);
    chain_names.push_back(word_segments[0]);

&#34;链&#34;定义为map<string, vector<ShopChain>> chains;

1 个答案:

答案 0 :(得分:0)

我无法理解您需要动态命名的内容。您似乎缺少一些有关数据结构的基本知识,所以让我向您展示一种方法:

在顶层,我们将拥有:

std::vector<ShopChain> shop_chains;

其中ShopChain是:

struct ShopChain {
     std::string name;              // shop chain has-a name
     std::vector<Shop> shops;       // and shops
     std::vector<Product> products; // and products (common for all shops)
};

在您的问题中定义了ProductShop是:

struct Shop {
    std::string location; // shop has-a location
};

vector <Product> shop_locations;作为一名成员对我来说毫无意义。

如果您认为他们的商品不一定相同,您可能需要在products下移动Shop。也许您也不想存储Product的重复项,因此您需要将它们存储在单独的数据结构中,并且只保留对它们的引用。