1

很多时候,我发现自己必须为多维数据定义一个容器。

举个例子:我有很多 Chip,每个 Chip 有很多 Registers,每个 Register 有很多 Cell,每个 Cell 有很多 Transistor。

在我的 C++ 程序的某个阶段,我必须读取这些数据,然后我必须使用它。

我不能为这些数据使用任何外部存储:文件、数据库等。

那么,我应该创建一些多维 STL 容器吗?一张矢量地图,或者类似的东西……?

或者我应该为它们中的每一个创建类(结构)?包含晶体管向量的单元类,然后是包含单元向量的寄存器类,等等?但是,如果以后我想通过晶体管而不是芯片访问我的数据怎么办?

还有什么办法吗?

谢谢

编辑:忘了提:我不能使用 boost。

4

4 回答 4

5

您需要映射您的域。

那么,我应该创建一些多维 STL 容器吗?一张矢量地图,或者类似的东西……?

每个矢量/地图都将包含某种类型的对象。这将我们带到您的下一个问题:)

或者我应该为它们中的每一个创建类(结构)?

看起来这至少是你需要的。

包含晶体管向量的单元类,然后是包含单元向量的寄存器类,等等?

看看两者has-ais-implemented-in-terms-of设计。

但是,如果以后我想按晶体管而不是芯片对数据进行排序怎么办?

什么数据?您始终可以根据上下文传递比较器。另外,问问自己是否真的需要向Transistor使用Chip. 这将有助于开始。

于 2009-03-03T11:29:45.627 回答
4

Implement full classes for them. Your code will be cleaner in the end.

Whenever I ignore this axiom, it comes back to haunt me. I implemented a hierarchical 3-tiered string collection in terms of std::pairs of std::strings and std:pairs. It was quick and simple, and when I had to replace one layer and then another with a class to contain extra attributes, it was surprisingly easy to do. But in the end, the code was a mess and I wasn't happy documenting it. Lesson learned again, and again, and again...

于 2009-03-03T15:11:34.580 回答
1

If you want to access your data along different "dimensions," you may be interested in boost::multi_index_container. I haven't used it myself, but it looks like it fits the bill.

于 2009-03-03T11:41:53.773 回答
1

As advised, I chose to implement full classes:

class Chip
{
    map<RegisterLocation, Register> RegistersPerLocation;
  public:
    void AddRegisterPerLocation(RegisterLocation, Register); 

};

class Register
{
    map<CellLocation, Cell> CellsPerLocation;
  public:
    void AddCellPerLocation(CellLocation, Cell); 
};

// etc..
于 2009-03-04T11:45:09.560 回答