QMap<QString,QMap>

Alles rund um die Programmierung mit Qt
Antworten
Lykurg
Beiträge: 30
Registriert: 9. August 2004 17:30

QMap<QString,QMap>

Beitrag von Lykurg »

Hi,

ich brauch QMap<QString,QMap>, also dass ich dann ein 3-dim Array habe. (map["foo"]["bar"] = "value")

Danke,
Lykurg
miketech
Beiträge: 125
Registriert: 3. August 2004 11:19

Beitrag von miketech »

Hi,

funktioniert nicht sowas wie:

QMap <QString, QMap<QString, Irgendwas>> myMap

?

Mike
Lykurg
Beiträge: 30
Registriert: 9. August 2004 17:30

Beitrag von Lykurg »

miketech hat geschrieben: QMap <QString, QMap<QString, Irgendwas>> myMap
Äh, und da war mal wieder die Sicht auf den Wald durch die Bäume verdeckt!
Hab einfach nicht dran gedacht das zweite QMap auch nich zu definieren.

Danke,
Lykurg
Metzlmane
Beiträge: 13
Registriert: 23. März 2010 19:43
Kontaktdaten:

Beitrag von Metzlmane »

Und wie fülle ich jetzt das innere QMap?
danielp1000
Beiträge: 8
Registriert: 24. Mai 2010 18:41

Beitrag von danielp1000 »

Kann es sein, dass du das innere QMap zuerst definierst, dann füllst und dann das oberste QMap damit füllst?
Metzlmane
Beiträge: 13
Registriert: 23. März 2010 19:43
Kontaktdaten:

Beitrag von Metzlmane »

Könntest du mir bitte ein Beispiel geben?
Ich habe schon alles mögliche versucht... sitze wohl gerade auf dem Schlauch
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag von padreigh »

Code: Alles auswählen


    srand(time(0));
    
    QStringList sl1(QString("A,B,C,D,E,F,G,H").split(","));
    QStringList sl2(QString("1,2,3,4,5,6,7,8").split(","));
    
    QMap<QString,QMap<QString,QVariant> > outer;
    foreach (QString aus1, sl1)
    {
        QMap<QString,QVariant> inner;
        foreach (QString aus2, sl2)
        {
            inner.insert(aus2,QString::number(rand()%2000));
        }
        outer.insert(aus1,inner);
    }


    foreach(const QString oKey, outer.keys())
    {
        foreach (QString iKey, outer[oKey].keys())
            qDebug() << "out [" << oKey << "][" << iKey << "]  " << outer[oKey].value(iKey).toString();
    }

    qDebug() << "[B][1]" << outer["B"]["1"].toString();

    
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
Metzlmane
Beiträge: 13
Registriert: 23. März 2010 19:43
Kontaktdaten:

Beitrag von Metzlmane »

wunderbar, vielen Dank!
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag von padreigh »

Ich wollts mir eigentlich verkneifen ... aber warum das rumgeschachtel ... Es wäre auch QMap<QPair<QString,QString>, QVariant> möglich ... oder ein

Code: Alles auswählen

private:
    QMap <QString,QVariant> myMap;
    QString makeKey(const QString & a, const QString & b) { return a+":"+b;}

public:
    QVariant getValue(const QString & a, const QString & b) 
    { 
        return myMap.value(makeKey(a,b)); 
    }

    void addToMap(const QString & a, const QString & b, QVariant & v) 
    {
        myMap.insert(makeKey(a,b),v);
    }

Der einzige mir spontan einfallende Vorteil der QMap Schachtelung wäre, wenn du dir eine komplette Map aus der äusseren rausnimmst und sie dann über perRef irgendwas mitgibst ...
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
Antworten