Map

Top  Previous  Next

Skripte > Klassen-Elemente und C++-Befehle > interpretierte C++-Anweisungen > Container > Map

 

In der Containerklasse Map wird eine Liste von Wertepaaren verwaltet. Alle Wertepaare einer Liste haben bestehen aus den gleichen Datentypen. Es gibt jedoch verschiedene Map-Typen, je nach Typ der enthaltenen Wertepaare. (Siehe obige Tabelle)

 

Syntax

 

mstrbool <bezeichner>

mstrint <bezeichner>

mstruint <bezeichner>

mstrchar <bezeichner>

mstrstr <bezeichner>

mstrnode <bezeichner>

mstrdnode <bezeichner>

 

Beschreibung

 

Die Reihe der Map-Typen sind im exportierten Code typedefs der Klasse CTT_Map< value_type >. CTT_Map ist abgeleitet von std::map< value_type >

 

 

Eine Map-Variable ist eine Liste von Wertepaaren.. Jedes diese Wertepaare besteht aus einem Schlüsselwort und dem dazugehörigen Wert. Die Wertepaare sind stets alphabetisch gemäß den Schlüsseln sortiert. Daher kann in einer Map sehr effektiv nach einem Schlüssel gesucht werden, während die Suche nach einem Wert vergleichsweise langsam ist.

Eine Map befindet sich jederzeit in einem bestimmten Zustand: ein bestimmtes Wertepaar kann als das aktuelle ausgezeichnet sein. Das aktuelle Wertepaar wird durch den Cursor (Zeiger) bezeichnet. Der Cursor kann auch ungültig sein oder bildlich gesprochen vor bzw. hinter sämtlichen Wertepaaren positioniert sein. In diesem Fall ist die Eigenschaft hasCurrent false und ein Zugriff aus den Schlüssel oder den Wert macht keinen Sinn. Der Cursor läßt sich positionieren und die Eigenschaften des aktuellen Wertepaars lassen sich abfragen oder verändern. 

 

 

Sämtliche Map-Klassen verfügen über die gleichen Methoden. Dies sind

 

1. die nur lesenden Methoden der allgemeinen Cursor-Klasse

 

bool                isValid() const

bool                hasCurrent() const

bool                empty() const        

unsigned int        size() const

bool                gotoNext()

bool                gotoPrev()

value_type        value() const

bool                containsValue(const value_type& ) const

bool                findValue(const value_type& xValue)

bool                findNextValue(const value_type& xValue)

bool                findPrevValue(const value_type& xValue)

 

 

2.) getCursor() const

 

Mit dieser Methode wird die Verbindung eines externen Cursors mit der Map hergestellt.

 

Beispiel:

 

mstrnode m;

mstrnode::cursor cr =  m.getCursor();

 

cr zeigt nun auf das gleiche Datenelement wie der interne Cursor, kann aber unabhängig vom ersten neu positioniert werden.

 

 

3. Zusätzlich zu den allgemeinen Methoden verfügt sowohl die Map selbst als auch ein externer Map-Cursor über die lesenden Methoden:

 

str key() const

 

gibt den Schlüssel des aktuellen Wertepaars zurück, oder einen leeren String, falls es kein aktuelles Wertepaar gibt.

 

bool containsKey(const str& xsKey) const

 

gibt true zurück, wenn der Schlüssel xsKey in der Map enthalten ist.

 

 

bool findKey(const str& xsKey)

 

sucht nach dem Schlüssel xsKey. Ist der Schlüssel vorhanden, wird das entsprechende Wertepaar zum aktuellen Wertepaar und die Funktion gibt true zurück. Andernfalls wird false zurückgegeben.

 

4.) Methoden, die den Inhalt der Map verändern

 

void reset()

 

Setzt den Cursor vor bzw. hinter die Liste der Wertepaare der Map.

 

 

void clear()

 

entfernt alle Wertepaare und führt reset für alle Cursor durch.

 

 

bool add(const str& key, const value_type& xValue)

 

fügt ein neues Wertepaar unter dem Schlüssel key mit dem Wert xValue ein und gibt bei Erfolg true zurück. Falls bereits ein Wertepaar mit dem Schlüssel key in der Map vorhanden war, wird false zurückgegeben und der vohandene Wert wird nicht überschrieben.

Für alle Cursor wird reset ausgeführt.

 

 

 

bool remove()

 

löscht das aktuelle Wertepaar aus der Map und gibt bei Erfolg true zurück. Gibt es kein aktuelles Wertepaar oder tritt ein Fehler auf, wird false zurückgegeben.

Für alle Cursor wird reset ausgeführt.

 

 

bool remove(const str& xsKey)

 

löscht das Wertepaar mit dem Schlüssel xsKey aus der Map und gibt bei Erfolg true zurück. Ist der Schlüssel nicht in der Map vorhanden, wird false zurückgegeben.

Für alle Cursor wird reset ausgeführt.

 

 

bool setValue(const value_type& xValue)

 

Setzt den Wert des aktuellen Wertepaars als xValue und gibt bei Erfolg true zurück. Gibe es kein aktuelles Wertepaar oder tritt ein Fehler auf, so gibt die Funktione false zurück.

 

 

5.) Direkter Zugriff auf Elemente

 

Bei einer Map m kann mit

 

m[key]

 

direkt auf den Wert zugegriffen werden und oder es können direkt Werte mit dem Schlüssel key in die Map eingefügt werden, wenn der Schlüssel noch nicht in der Map vorhanden war. Mit

 

m["one"] = "two";

 

wird ein Element mit dem Schlüssel "one" und dem Wert "two" in eine mstrstr eingefügt und mit

 

str s = m["one"];

 

kann der Wert "two" dann in den str s kopiert werden.

Wurde ein neues Element eingefügt, so wird für alle Cursor reset ausgeführt.

 

Vorsicht: wenn nicht zuvor ein Wert zu dem Schlüssel gesetzt wurde, wird durch die letzte Anweisung automatisch ein leerer String als Wert zum Schlüssel "one" eingesetzt. Der leere String wird dann nach s kopiert. Um zu testen, ob ein Schlüssel in der map vorhanden ist, muss die obige containsKey Funktion verwendet werden.

 

 



Diese Seite gehört zur TextTransformer Dokumentation

Home  Inhalt  English