2009-03-03 21 views
1

多くの場合、多次元データのコンテナを定義する必要があります。C++の多次元データ処理

例を挙げる:私は多くのチップを持っており、各チップには多数のレジスタがあり、各レジ​​スタには多くのセルがあり、各セルには多くのトランジスタがあります。

私のC++プログラムのいくつかの段階で、このデータを読んで、後でそれを使用する必要があります。

私は、このデータのために任意の外部ストレージを使用することはできません

:だから等のファイル、データ・ベース、

は、私はいくつかの多次元のSTLコンテナを作成する必要がありますか?ベクトルのマップ、またはそのようなもの...?

それぞれのクラス(構造体)を作成する必要がありますか? Transistorsのベクトルを含むCellクラス、そしてCellなどのベクトルを含むRegisterクラス?しかし、後でチップではなくトランジスタでデータにアクセスしたいのであればどうしますか?

他の方法はありますか?言及するのを忘れてしまった:私はブーストを使用することはできません

あなたは

EDITありがとうございました。

答えて

4

フルクラスを実装します。あなたのコードは最後にきれいになります。

この公理を無視すると、いつでも私を迎えに来ます。 std :: stringsとstd:pairsのペアで階層的な3層構造の文字列コレクションを実装しました。すばやくシンプルで、あるレイヤーを置き換えなければならないときに、別のレイヤーをクラスに置き換えなければならないときには、それは驚くほど簡単でした。しかし結局、コードは混乱していて、私はそれを文書化して満足していませんでした。レッスンは再び学び、そして再び、そして再び...助言

+0

はAIプログラミング上のCharniakらの著書の議論を思い出します。そのようなものに基づいてシステムを設計した後、どのプロパティ(cadar x)が意味するもの(おおよそx.first.second.first)が覚えられず、再設計できませんでした。 –

5

ドメインをマッピングする必要があります。

多次元のSTLコンテナを作成する必要がありますか?ベクトルのマップ、またはそのようなもの...?

各ベクター/マップには、ある種のオブジェクトが含まれます。それはあなたの次の質問に私たちをもたらします:)

それぞれのクラス(構造体)を作成する必要がありますか?

これは少なくともあなたが必要とするものです。

Transistorsのベクトルを含むCellクラス、次にCellsなどのベクトルを含むRegisterクラス?

has-ais-implemented-in-terms-ofのデザインを見てください。

しかし、後でチップではなくトランジスタでデータを並べ替える場合はどうすればよいですか?

どのようなデータですか?コンテキストに応じてコンパイラの周りをいつでも渡すことができます。 Chipで働いている人にレベルの詳細Transistorを実際に公開する必要があるかどうかを自問してください。それが始まるのを助けるでしょう。

1

異なる「次元」に従ってデータにアクセスする場合は、boost::multi_index_containerに興味があるかもしれません。私はそれを自分で使ったことはありませんが、法案に適合しているようです。

1

として、私は完全なクラスを実装することにしました:。

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

}; 

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

// etc..