c++ - 我如何创建结构的结构等。嵌套多个结构?

标签 c++ arrays struct nested

我在弄清楚我应该如何实现多个结构的嵌套时遇到问题,目标是拥有仓库、仓库、带货架的货架和货架上的元素及其 2 位数 ID。现在我的代码看起来像这样:

#include<iostream>
struct place{
    unsigned short place_[65545][2];
};
struct shelf{
    place shelf_[128];
};
struct rack{
    shelf rack_[128];
};
struct warehouse{
    rack warehouse_[128];
    shelf handy_warehouse_shelf_;
};
struct depot{
    warehouse depot_[128];
    rack handy_rack_;
    shelf handy_depot_shelf_;
};
int main(){
    depot name1;
    name1.depot_[0].warehouse_[0].rack_[0].shelf_[0].place_[0][0]=1;
    return 0; 
}

并且无法确定是我理解结构如何工作还是我如何访问嵌套数组中特定“单元格”的问题。

最佳答案

您的软件仓库使用了超过 65545 * 2 * 128 * 128 * 128 * 128 * sizeof(unsigned short) 字节的内存。这对于典型的自动存储实现来说当然太多了(“堆栈”……通常 AFAIK 限制在 1 到 8 MB 之间)。

结构的嵌套是正确的......只是其中的大部分。

我建议将设计更改为:

struct Position {
  unsigned warehouse;
  unsigned rack;
  unsigned shelf;
  unsigned place;
  unsigned row;
  unsigned column;
};

struct Depot {
  std::unordered_map<Position, unsigned short> places;
}

以上当然不是一个完整的实现,你还需要考虑如何处理像handy_depot_shelf这样的事情,但我希望你明白了。

访问方式

the_depot.places[{0, 0, 0, 0, 0, 0}] = 1;

这当然只是为了演示目的;您应该将其隐藏在成员函数中并执行诸如边界检查之类的操作。


如果您不能使用 std::unordered_map(赋值?),那么您需要自己实现一个替代方案。一个非常简单的开始是在每个节点中包含键和值的链表。遍历列表,直到找到具有匹配键的节点,然后返回对值的引用。否则添加具有键和值的新节点,返回对该值的引用。

关于c++ - 我如何创建结构的结构等。嵌套多个结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59414063/

相关文章:

c++ - SFINAE 不适用于 constexpr 函数?

c++ - Gtkmm - 固定窗口的位置?

c# - 根据第一个索引值对二维列表进行排序

c - 静态变量与单例结构

c - 灵活数组成员的使用无效(与其他人不同)

c++ - 检查类型是否可散列

C++使用getline从文本文件数据类型作为结构读取

c - C语言中如何将变量中的字符放入数组中?

java - 在对象数组上使用 for-each - "Integer[] array"- 为什么 "for(int i : array)"有效?

c - 为结构内部的指针赋值