C ++多维数据处理

时间:2009-03-03 11:21:42

标签: c++ oop stl containers

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

我们举一个例子:我有很多芯片,每个芯片有很多寄存器,每个寄存器有很多单元,每个单元有很多晶体管。

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

我无法对此数据使用任何外部存储:文件,数据库等

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

或者我应该为每个人创建类(结构)?包含Transistors矢量的Cell类,然后是包含Cells矢量的Register类等?但是如果以后我想通过晶体管访问我的数据,而不是芯片呢?

还有其他方式吗?

谢谢

编辑:忘记提及:我不能使用提升。

4 个答案:

答案 0 :(得分:5)

您需要映射您的域名。

  

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

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

  

或者我应该为每个人创建类(结构)?

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

  

包含Transistors矢量的Cell类,然后是包含Cells矢量等的Register类?

同时查看has-ais-implemented-in-terms-of个设计。

  

但是如果以后我想通过晶体管排序我的数据,而不是芯片呢?

什么数据?您可以随时根据上下文传递比较器。另外,问问自己是否确实需要将Transistor级详细信息公开给使用Chip的人。这将有助于开始。

答案 1 :(得分:4)

为他们实施完整的课程。您的代码最终会更清晰。

每当我忽略这个公理时,它就会回来困扰我。我根据std :: pairs std :: strings和std:pairs实现了一个分层的3层字符串集合。它快速而简单,当我不得不用一个类替换一个层然后另一个层来包含额外的属性时,这非常容易。但最后,代码是一团糟,我不高兴记录它。课程再次学习,一遍又一遍......

答案 2 :(得分:1)

如果您想要沿不同的“维度”访问您的数据,您可能会对boost::multi_index_container感兴趣。我自己没有使用它,但看起来它符合要求。

答案 3 :(得分:1)

据我所知,我选择实施全班:

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

};

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

// etc..