STL: Vector von Pointern auf Map-Einträge

Hi,

in meiner Hauptklasse habe ich folgende Verwaltungsstruktur:

 vector \*\> m\_BigTable; 
 vector \*\>::iterator m\_BigTableIterator;
 map \*littleTable;
 map::iterator littleTableIterator;

Im Dauerbetrieb soll die Klasse in dieser BigTable die Informationen schreiben, dabei ändert sich an der Speicherstruktur nichts mehr, nur die Werte werden geändert. (Absicherung über find())

Ein Abspeichern in einem Array ist nicht ratsam, da für den key der Map der Zahlenbereich von 1 bis 65535 zulässig ist, jedoch in den einzelnem Maps aber nur etwa 100 Einträge zu erwarten sind (vielleicht in einer auch bis zu 1000) (und ich nicht so mit dem Arbeitsspeicher rumquarzen will)

In anderen Klassen will ich diese Informationen auslesen.

Im Einfachsten Fall also
Wert = (*(BigTable[i]))[j]
(und i und j als eigenen Datentyp in einem vector speichern)

Jedoch ist dieser Zugriff der Map O(log(N)) komplex, und das möchte ich im Dauerbetrieb gern vermeiden.

Also dürfte es ausreichend sein, einen Pointer auf den jeweiligen Eintrag zu speichern, also den jeweiligen Iterator, jedoch als Eintrag eines Vectors. (Vector, weil in einigen Elementen nur wenige, in anderen mehrere Einträge zu erwarten sind und 2. der Programmierer keinen Einfluss auf die Anzahl der Einträge hat, da diese in Dateien konfiguriert werden)

 vector::iterator\> m\_LocalTableEntries; 
 vector::iterator\>::iterator m\_LocalTableEntries\_Iterator;

Soweit so gut, wenn ich davon ausgehe, daß ich mit „=“ die Iteratoren zuweisen kann.

Aber:

Im Dauerbetrieb muß ich die Vektoren leeren und neu füllen, jedoch ohne neuen Speicher zu allokieren.
Also initialisiere ich zuerst diese Vectoren und kopiere alle möglichen Elemente hinein, und dann möchte ich die einzelnen Nutzdaten als nicht zu gebrauchen "Flag"en.
Wenn ich echte Pointer hätte, würde ich die Einträge einfach auf NULL setzen und später beim iterieren in der for-Schleife gleich darauf prüfen. (wenn ich gleich den Pointer auf die Nutzdaten (unsigned int in der BigTable) eintrage, ist das ja möglich, jedoch kann ich dann bei der Fehlersuche nicht mehr den Key in die Debug-Ausgaben mit aufnehmen)

Jedoch kann ich den Iterator nicht auf NULL prüfen, der Compiler meckert für die Abfrage „((*m_LocalTableEntries_Iterator) != NULL)“, daß er keinen passenden Vergleichsoperator gefunden hat.

Hat jemand ne Idee?
(außer einen Dummy-Datensatz zu generieren und den Iterator auf diesen Datensatz hineinzukopieren und dann auf dessen Key zu prüfen)

Vielen Dank, wenn Ihr versucht habt, mir zu folgen
Winni

Hallo

in meiner Hauptklasse habe ich folgende Verwaltungsstruktur:

Im Dauerbetrieb muß ich die Vektoren leeren und neu füllen,
jedoch ohne neuen Speicher zu allokieren.

Hat jemand ne Idee?
(außer einen Dummy-Datensatz zu generieren und den Iterator
auf diesen Datensatz hineinzukopieren und dann auf dessen Key
zu prüfen)

Du hast vergessen zu sagen, *was* Du konkret machen willst.
Wie soll man denn einen optimalen Zugriff bauen, wenn man
gar nicht weiß, was überhaupt passieren soll?

Was soll denn (und warum) in die Datenstruktur rein?
Welche Mengen?

Grüße

CMБ