2011-01-03 4 views
1

내 응용 프로그램 용 객체 시스템을 구축 중입니다. 지금은 같은 코드를 가지고 :지도 키 정렬

std::map<std::string, Object*> mObjects; 

아이디어는 클래스 Object (update 전화)하지만 어떤 순서로 각각의 개체를 업데이트하는 것입니다.

각 개체에 int z_index; 멤버가 있습니다. 해당 색인으로 인해지도를 정렬하려면 어떻게해야합니까 (btw, 색인은 동일 할 수 있음)?

내 첫번째 생각은이었다처럼 키 이름에 ID를 추가 :

Object *temp = /* ... */ 
temp->z_index = 5; 
temp->name = "test"; 
mObjects[temp->z_index + temp->name] = temp; 

하지만이 코드를 나는 이름으로 개체에 액세스 잃었습니다.

답변

4

부스트 멀티 인덱스 컨테이너의 이상적인 후보와 같습니다! 두 개의지도, 인덱스 이름 하나 하나를 유지 할 수

또는 둘 다 (그런데 스마트 포인터를 보라 - shared_ptr 등!) 같은 객체를 포인터를 잡고

을 또는 더 복잡한을 만들 키 (예 : 이름과 색인이있는 structoperator<)는 이름과 색인을 모두 확인할 수 있습니다.

+0

은 옵션 일 수 있습니다. – Naveen

+0

@Naveen,'std :: multimap'을 의미합니까? – Nim

+1

@Naveen : STL 컨테이너는 동시 정렬 술어를 지원하지 않습니다. OP가 2 개의 컨테이너를 유지하기를 원하지 않는다면 Boost Multi-Index가 최선의 선택입니다. – jweyrich