2010-07-28 2 views
1

데이터를 저장하는 데이터 구조가 있습니다. 음, 데이터. 이제는 다양한 방식으로 다양한 데이터에 액세스해야하므로 본질적으로 메모리 인덱스를 구축하고 있습니다. 하지만 궁금하네요 : 인덱스가 포인터 또는 사본을 보유해야합니까?색인 만들기 : 사본 또는 포인터?

정교하게하려면, 내가 두 Widget의이, 내가 지금

class Widget 
{ 
    // Ways to access the list of gears... 
private: 
    std::list<Gears> m_gears; 
}; 

가 있다고 가정하고, 자신의 Gear의 사이에 두 매핑 사이에 존재한다. 현재,이

boost::unordered_map<Gear, Gear> 

하지만 Gear 상당히 무거운 클래스이고, 나는 이렇게 많은 복사본을 만드는 것 같은 느낌은 가난한 디자인입니다. 포인터를 저장할 수는 있지만 매핑은 해당 Widget s의 수명 동안 만 유효하며 -> s가 시작됩니다 ... (std::liststd::vector으로 변경되면 더 복잡해집니다 ...)

사본과 관련하여 실제로는 약간 더 나쁩니다. 각 방향마다 하나씩 두 개의 boost::unordered_map이 있습니다. 그래서, 각 Gear에 대해, 나는 그것의 2 개의 사본을 만들고있다.

또는 색인을 Widget 클래스 안에 넣을 수도 있지만 이는 Widget 클래스의 책임을 위반하는 것 같습니다.

+1

다중 색인 컨테이너를 추가하지 않았습니까? – sbi

답변

0

당신 수도 시도 포인터 컨테이너 도서관 부스트 : http://www.boost.org/doc/libs/1_43_0/libs/ptr_container/doc/ptr_container.html

를 내가 정확히 당신이 직면하고있는 문제를 해결 생각합니다.

+0

Boost Pointer Container에 대한 나의 이해는 그들이 Boost Pointer Container에 삽입 된 객체를 소유하고 있다는 것입니다. 내 객체는 실제로 스택 상에 있으므로'delete'가 필요 없습니다. 나는 내용을 삭제하지 않고 그것을 사용할 수있는 방법이 있는지를보기 위해 여전히 이것을 조사 할 것입니다. – Thanatos

0

gears 클래스에 정적으로있는 것처럼 모든 기어를 한 곳에 저장 한 다음 각 매핑 및 위젯에 참조/색인 만 저장할 수 있습니까?

각 장비에 대한 참조를 추적하여 처리시기를 알 수 있어야하지만 충분히 쉽게 수행 할 수 있습니다.

+1

플라이급처럼 들리 네요 - 그게 무슨 뜻인가요? – Thanatos

+0

예, 설명했던 것과 같습니다. (고마워, 전에는 그 말을 듣지 못했다.) 네가 가진 이래로 네 문제를 해결하지 못하니? – WillfulWizard