C ++使用struct的嵌套数据结构
所以我试图想出一个简单的数据结构,它将有连锁店,他们的商店位置和产品及其价格。
我想尝试的解决方案如下,但因为我忘记了C ++不支持动态命名,它不起作用。 我能以某种方式将这个逻辑变成C ++可以处理的东西吗?
包含我想要保存到我的数据结构中的数据的示例向量就像这样
{"chain_nameX", "location_nameX", "product_nameX", product_priceX}
前3个条目将是字符串,最后一个将是一个int或一个字符串(如果产品缺货,则不会有价格值,但是是一个字符串)。
我必须将这个结构体用于我的数据结构,但由于无法使用动态命名,所以我有点失落,至于什么是自然的解决方案。
struct Product {
string productname;
double price;
};
这是我创建的用于包含商店位置和上面的struct中的产品数据的结构,但我想使用动态命名,所以我不确定这是否是一种很好的方法来处理它
struct Shop {
string shop_location;
vector <Product> shop_locations;
};
所以,我想通过使用这样的逻辑来开始存储数据:
Shop word_segments[1];
但是因为动态命名实际上不是C ++中的事情,所以它不起作用。 是否有任何顺利的解决方案来制定这样的数据结构?
另外,我强制要使用预先确定的struct Product
,但不是产品作为结构类型的冗余? 如果我在店铺选址调用它,那么限制将只有一个产品,如果我通过产品名字称呼它,那么为什么它包含productname
中它串?
编辑:如果我只是将结构数据结构命名为集合名称,并将它们保存到向量/其他数据结构中,那么当我将它们的元素重命名为数据结构的其他部分或它们的值全局更改时它们会保持不变吗? (让我知道这听起来太混乱了,我会举一个例子来说明我的意思)
编辑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]);
“链”被定义为map<string, vector<ShopChain>> chains;
我不明白你需要动态命名。 你似乎缺少一些关于数据结构的基本知识,所以让我告诉你一种方法:
在顶层,我们会有这样的:
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)
};
Product
在您的问题中定义, Shop
是:
struct Shop {
std::string location; // shop has-a location
};
vector <Product> shop_locations;
作为一名成员对我来说很没有意义。
如果您认为他们的商品不总是相同,您可能需要将products
移到Shop
下。 也许你也不想存储Product
重复,所以你需要将它们存储在一个单独的数据结构中,只保留对它们的引用。
上一篇: C++ Nested data structure utilizing struct
下一篇: LInux/c++, how to protect two data structures at same time?