2016-03-31 16 views
0

Ich habe eine Karte von String zu String, zum Beispiel die Karte haben 4 Einträge, die Schlüssel sind: abc, abd, ab, ae und die Werte sind 1, 2 , 3, 4 jeweils.Wie Konvertieren einer Flat List Merge zu einer Hierarchie Zeichenfolge

std::map<string, string> myMap; 
myMap["a.b.c"] = "1"; 
myMap["a.b.d"] = "2"; 
myMap["a.b"] = "3"; 
myMap["a.e"] = "4"; 

Nun würde Ich mag eine Zeichenfolge in einer Hierarchie-Format erstellen:

string myFunc(const std::map<string, string>& m) 
{ 
    //the implementation? 
} 

Dann teste ich mit:

string myString = myFunc(myMap); 

myString aussehen könnte:

a(b(c=1, d=2), b=3, e=4) 

Hinweis: Die Reihenfolge des Kommas ist getrennt Elemente sind nicht wichtig.

+0

Und was genau haben Sie bereits versucht, um Ihren gewünschten Algorithmus zu implementieren? –

+0

@SamVarshavchik, na ja, nur ein bisschen Hirnsturm .... Ich habe objektorientiert implementiert (siehe meinen eigenen Beitrag) anstatt auf eine einzige Funktion zu setzen. Danke trotzdem – milesma

Antwort

0

Anstatt sich auf die ideale Funktion stecken geblieben, implementiert ich auf eine andere Weise:

class TreeItem 
{ 
public: 
    string name; 
    string value; 
    TreeItem* parent; 
    std::vector<TreeItem*> children; 
}; 

Dann eine tokenize auf den flachen Tasten tun, um verkettete TreeItems zu schaffen; Das Ergebnis ist ein Baum, dessen Wurzel a ist, mit zwei Kindern, b und e, und b haben weiter zwei Kinder c und d.

Dann eine Tiefensuche zuerst auf dem Baum mein erwartetes Ergebnis gedruckt.

Verwandte Themen