2011-01-03 7 views
1

Ich baue Objekt-System für meine Anwendung. Jetzt habe ich einen solchen Code:Map keys sorting

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

Die Idee ist es, jedes Objekt der Klasse Object (Call update), aber in einer bestimmten Reihenfolge zu aktualisieren.

In jedem Objekt befindet sich ein Element int z_index;. Wie kann ich die Karte aufgrund dieses Indexes sortieren (übrigens, Indizes könnten gleich sein)?

Meine erste Idee war: add-ID in den Schlüsselnamen wie:

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

Aber mit diesem Code Ich habe verloren Objekte mit Namen zugreifen.

Antwort

4

Scheint wie ein idealer Kandidat für den Boost Multi-Index-Container!

Oder Sie zwei Karten halten konnte, einen nach dem Namen eines durch den Index, die beide Halte Zeiger auf das gleiche Objekt (bei Smart-Pointer durch die Art und Weise aussehen sollte - wie shared_ptr!)

oder eine komplexere erstellen Schlüssel (dh ein struct mit dem Namen und dem Index, stellen Sie operator< zur Verfügung), der den Namen und den Index etc. überprüfen kann.

+0

kann sein 'std :: multiset' konnte auch eine Wahl sein. – Naveen

+0

@Naveen, meinst du 'std :: multimap'? – Nim

+1

@Naveen: Keiner der STL-Container unterstützt gleichzeitige Sortierprädikate. Boost Multi-Index ist die beste Wahl, wenn OP 2 Container nicht warten möchte. – jweyrich