如何将Flat list merge转换为层次结构字符串

时间:2016-03-31 01:23:28

标签: c++

我有一个从字符串到字符串的映射,例如,映射有4个条目,键是:a.b.c,a.b.d,a.b,a.e,值分别为1,2,3,4。

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

现在我想以层次结构格式构建一个字符串:

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

然后我测试:

string myString = myFunc(myMap);

myString可能就像:

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

注意:逗号分隔项的顺序并不重要。

1 个答案:

答案 0 :(得分:0)

我没有陷入理想的功能,而是以不同的方式实施:

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

然后在平键上进行标记化以创建链式TreeItem;结果是一棵树,其根是a,有两个孩子,b和e,而b还有两个孩子c和d。

然后树上的深度优先搜索打印出我的预期结果。