Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;利用struct的嵌套数据结构_C++_Data Structures_Struct_Nested - Fatal编程技术网

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

C++ C++;利用struct的嵌套数据结构,c++,data-structures,struct,nested,C++,Data Structures,Struct,Nested,因此,我试图提出一个简单的数据结构,包括连锁店、店铺位置和产品及其价格 我想尝试的解决方案是跟踪,但因为我忘记了C++不支持动态命名,所以它不起作用。我能把这个逻辑变成C++所能处理的吗? 包含要保存到数据结构中的数据的示例向量如下 {"chain_nameX", "location_nameX", "product_nameX", product_priceX} 其中,前3个条目为字符串,最后一个条目为int或字符串(如果产品缺货,则不会有价格值,而是字符串) 我必须在我的数据结构中使用这个

因此,我试图提出一个简单的数据结构,包括连锁店、店铺位置和产品及其价格

<>我想尝试的解决方案是跟踪,但因为我忘记了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;
};
<>但是由于C++中动态命名不是事实,它将无法工作。有没有任何平滑的解决方案来制定这样的数据结构

另外,我被强制使用预先确定的结构
产品
,但作为结构的产品不是有点多余吗?如果我按店铺位置调用它,那么限制将仅为一种产品,如果我按产品名称调用它,那么为什么它包含
productname
字符串

编辑: 如果我只是将struct数据结构命名为set name,并将它们保存到vectors/其他数据结构,那么当我为数据结构的其他部分重命名它们的元素时,它们是否会保持不变,或者它们的值是否会全局更改?(如果这听起来太令人困惑,请告诉我,我会举一个例子来说明我的意思)

编辑2:你是按照建议做的吗

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

“链”定义为
映射链

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

在顶层,我们将有:

std::vector<ShopChain> shop_chains;
其中,
产品
在您的问题中定义,
商店
是:

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)
};
struct Shop {
    std::string location; // shop has-a location
};
矢量车间位置作为一名成员对我来说意义不大



如果您认为
产品
的商品并不总是相同的,您可能需要将其移动到
商店
下。也许您也不想存储产品的副本,所以您需要将它们存储在单独的数据结构中,并且只保留对它们的引用。

我遇到的问题是,能够为新的连锁店顺利创建新的数据结构,因为连锁店,他们的店铺或个别店铺的产品都不是预先确定的。在Python中,我可以使用
Shop word_segments[1]=somestring动态命名和调用数据结构,但这在C++@Grak中没有多大用处。我认为您不需要新的数据结构,只需要用数据填充数据结构。这就是问题所在吗?老实说,我很难掌握使用
struct
构建的数据结构的逻辑。如果我要有很多连锁店、商店和产品。我想我会在这里闲逛一下,看看我是否能掌握它们是如何工作的better@Grak你能告诉我确切的python语法吗?你在找字典吗,即
std::map
?@Grak这是你如何声明向量的:
std::vector shop\u chains,这是添加元素的方式(当然是在索引
0
处):
购物链。向后推(链)
并以相同的方式在后续索引中附加另一个元素。您还可以使用
std::vector
s构造函数重载获取
std::initializer\u列表
-。因为
Shop word_segments[1]
表示一个向量数组的声明,所以
Shop word_segments[2]
是两个向量数组。他们不能有相同的名字。。。
struct Shop {
    std::string location; // shop has-a location
};