문제

여러 번, 다차원 데이터 용 컨테이너를 정의해야합니다.

예를 들어 봅시다 : 나는 많은 칩이 있고, 각 칩에는 많은 레지스터가 있고, 각 레지스터에는 많은 셀이 있으며, 각 셀에는 많은 트랜지스터가 있습니다.

C ++ 프로그램의 어떤 단계에서 나는이 데이터를 읽어야하고 나중에 사용해야합니다.

파일, 데이터베이스 등이 데이터에 외부 스토리지를 사용할 수 없습니다.

그렇다면 다차원 STL 컨테이너를 만들어야합니까? 벡터지도 또는 그와 비슷한 것 ...?

아니면 각각에 대한 클래스 (structs)를 만들어야합니까? 트랜지스터의 벡터를 포함하는 셀 클래스, 그리고 셀의 벡터 등을 포함하는 레지스터 클래스? 그러나 나중에 칩이 아닌 트랜지스터로 데이터에 액세스하고 싶다면 어떻게해야합니까?

다른 방법이 있습니까?

고맙습니다

편집 : 언급을 잊었습니다. 부스트를 사용할 수 없습니다.

도움이 되었습니까?

해결책

그들을 위해 전체 클래스를 구현하십시오. 결국 코드는 더 깨끗합니다.

내가이 공리를 무시할 때마다, 그것은 나를 괴롭히기 위해 돌아온다. std :: std :: strings and std : 쌍의 측면에서 계층 적 3 계층 문자열 컬렉션을 구현했습니다. 그것은 빠르고 간단했고, 한 레이어를 교체하고 다른 레이어를 교체해야 할 때 추가 속성을 포함하기 위해 클래스로 교체해야 할 때 놀랍게도 쉽게 수행 할 수있었습니다. 그러나 결국, 코드는 엉망이었고 나는 그것을 문서화하는 것이 행복하지 않았습니다. 교훈은 또 다시 배웠습니다.

다른 팁

도메인을 매핑해야합니다.

그렇다면 다차원 STL 컨테이너를 만들어야합니까? 벡터지도 또는 그와 비슷한 것 ...?

각 벡터/맵에는 일부 유형의 객체가 포함됩니다. 그것은 우리를 다음 질문으로 데려옵니다 :)

아니면 각각에 대한 클래스 (structs)를 만들어야합니까?

최소한 필요한 것 같습니다.

트랜지스터의 벡터를 포함하는 셀 클래스, 그리고 셀의 벡터 등을 포함하는 레지스터 클래스?

둘 다 봐 has-a 그리고 is-implemented-in-terms-of 디자인.

그러나 나중에 칩이 아닌 트랜지스터별로 데이터를 정렬하고 싶다면 어떻게해야합니까?

어떤 데이터? 컨텍스트에 따라 항상 비교기를 통과 할 수 있습니다. 또한 실제로 노출 해야하는지 스스로에게 물어보십시오. Transistor a와 함께 일하는 사람에게 레벨 세부 사항 Chip. 그것은 시작하는 데 도움이 될 것입니다.

다른 "크기"를 따라 데이터에 액세스하려면 관심이있을 수 있습니다. boost::multi_index_container. 나는 그것을 직접 사용하지 않았지만 법안에 맞는 것처럼 보입니다.

권고 한 바와 같이, 나는 전체 클래스를 구현하기로 결정했습니다.

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

};

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

// etc..
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top