Seite 1 von 1

[gelöst] QMap - value (int) einfügen und hochzählen?

Verfasst: 18. September 2008 04:53
von gelignite
Hallo,

beim Durchsuchen eines Feldes möchte ich die Häufigkeiten bestimmter "Dinge" ermitteln. Dazu habe ich mir überlegt eine QMap <QString, int> zu verwenden. Der Pseudocode schaut in etwa so aus:

Code: Alles auswählen

Durchlaufe das komplette Feld
{
        Wenn auf "Ding" gestossen:
        {
                Überprüfe, ob "Ding" bereits in Map eingetragen. Falls nein:           // Neues "Ding" gefunden
                {
                        Nimm "Ding" mit Häufigkeit 1 in die Map auf
                }
                Sonst:
                {
                        Erhöhe die Häufigkeit von "Ding" um 1
                }
        }
}
In Perl geht dies (durch Ausnutzen einer bestimmten Eigenschaft / Fähigkeit ) z. B. so:

Code: Alles auswählen

# Determine frequencies of each item
while ( length( $ganzesFeld ) > 0 )
{
	$haeufig{ chop( $ganzesFeld ) } += 1;
}
Ginge dies in ähnlicher Form auch mit einer QMap oder muss ich da zwangsläufig mit einem if-else-Konstrukt erst prüfen, ob es jenen Eintrag gibt und falls ja, erst dessen aktuellen Wert holen um ihn dann zu inkrementieren und wieder wegzuschreiben?

Gruß,
gelignite

Verfasst: 18. September 2008 07:29
von macman
Warum keine QList?
<http://doc.trolltech.com/4.4/qlist.html#count>

[edit]Sehe gerade das es bei QMap auch einen count gibt.

Verfasst: 18. September 2008 09:05
von upsala

Code: Alles auswählen

QMap<QString, int> map;
map[ding]=map.value(ding, 0)+1;

Verfasst: 18. September 2008 15:46
von gelignite
Hallo und danke für die Antworten.
macman hat geschrieben:Warum keine QList?
<http://doc.trolltech.com/4.4/qlist.html#count>

[edit]Sehe gerade das es bei QMap auch einen count gibt.
Weil ich projektweit mit QMaps verwende und jetzt nicht anfangen möchte es an einer Stelle mal so und an anderer Stelle mal so zu machen. (Eine Ausnahme wäre es, wenn es nicht anders ginge.) Übrigens war es ursprünglich mal eine QList, bis mir aber die Möglichkeit der Zuordnung von String und Häufigkeit fehlte. Es schien mir dann am einfachsten eine QMap <QString, int> zu verwenden. Das erwähnte count funktioniert nicht auf die Weise, wie ich es brauche:
Dokumentation hat geschrieben:Returns the number of items associated with key key.
Das würde mir immer 1 liefern, da zu einem Schlüssel "Ding" nur 1 Wert gehört - eine Ganzzahl, welche die Häufigkeit des Vorkommens von "Ding" repräsentiert.

Die von upsala geschriebene Möglichkeit ist ziemlich genau das, das ich gesucht hab. Vielen Dank.

Gruß,
gelignite