Lassen Sie uns sagen, dass ich eine Sammlung von Person Objekte, von denen jedes wie folgt aussieht:Welcher STL-Container für geordnete Daten mit Schlüsselzugriff?
class Person
{
string Name;
string UniqueID;
}
Nun müssen die Objekte in einem Behälter aufbewahrt werden, die mir sie bestellen ermöglicht so, dass ich Artikel gegeben kann X leicht Finde den Gegenstand X + 1 und X-1.
Ich brauche aber auch schnellen Zugriff basierend auf der UniqueID, da die Sammlung groß sein wird und eine lineare Suche wird es nicht schneiden.
Meine aktuelle 'Lösung' ist die Verwendung einer std :: list in Verbindung mit einer std :: map. Die Liste enthält die Personen (für den geordneten Zugriff) und die Karte wird verwendet, um UniqueID einem Verweis auf den Listeneintrag zuzuordnen. Das Aktualisieren des 'Containers' beinhaltet typischerweise das Aktualisieren sowohl der Karte als auch der Liste.
Es funktioniert, aber ich denke, es sollte eine klügere Art, es zu tun, vielleicht boost:bimap
. Vorschläge?
EDIT: Es gibt einige Verwirrung über meine Anforderung für "Bestellung". Zur Erklärung werden die Objekte nacheinander aus einer Datei gestreamt, und die 'Reihenfolge' der Objekte im Container sollte der Reihenfolge der Dateien entsprechen. Die Reihenfolge bezieht sich nicht auf die IDs.
Was meinen Sie mit 'X + 1' und' X-1'? Ich habe das Gefühl, dass es sich nicht auf das 'UniqueID'-Feld bezieht, also was ist es? Auf welche Reihenfolge beziehen Sie sich? –
Ich beziehe mich auf die Bestellung innerhalb des Containers. (unter der Annahme eines Vektors) Array [X], [X-1] und [X + 1] – Roddy
Was ist die Reihenfolge im Container? Ich denke, das ist es, was Matthieu versucht festzuhalten. – Joel