【问题标题】:Building a n-ary tree from a map从地图构建 n 叉树
【发布时间】:2015-06-15 17:52:01
【问题描述】:

我试图从地图中构建一棵树,以显示具有基类和派生类的类层次结构。一个节点可以有多个子节点和子节点

这是我的代码:

std::map<std::string, std::string> myClassMap; // 1. String (key) = Classname, 2. String = BaseClass


myClassMap.insert ( std::pair<std::string, std::string>("DerivedClass1", "OverallBaseClass"));
myClassMap.insert ( std::pair<std::string, std::string>("DerivedClass2", "OverallBaseClass"));
myClassMap.insert ( std::pair<std::string, std::string>("DerivedClass3", "OverallBaseClass") );
myClassMap.insert ( std::pair<std::string, std::string>("DerivedClass2-1'","DerivedClass2") );
myClassMap.insert ( std::pair<std::string, std::string>("DerivedClass2-1-1","DerivedClass2-1") );
myClassMap.insert ( std::pair<std::string, std::string>("DerivedClass2-1-2","DerivedClass2-1") );
myClassMap.insert ( std::pair<std::string, std::string>("DerivedClass2-2","DerivedClass2") );


  //and so on

我有一个方法:

void addTreeChild(QTreeWidgetItem *parent, std::string keyClassName)
{

    QTreeWidgetItem *treeItem = new QTreeWidgetItem();
    treeItem->setText(0, QString(keyClassName));
    parent->addChild(treeItem);

}

我可以调用它并将孩子添加到树中。 现在我的问题是,我怎样才能遍历地图,并将孩子添加到我的树中,所以它会出现一个类层次结构

【问题讨论】:

  • 我不清楚。你有 addTreeChildren 添加一个孩子,还是没有?如果您已经拥有它,为什么需要帮助“将孩子添加到我的树中”?而且,您在遍历地图时在做什么?简而言之,您的实际问题是什么?
  • 对不起,我更新了我的问题。我确实有一个方法,但只在子级下添加子级,没有层次结构(DerivedClass1/2/3 继承自OverallBaseClass)-->短,如何将项目添加到具有正确层次结构的树中?跨度>

标签: c++ tree stdmap tree-traversal


【解决方案1】:

首先要记住字符串需要双引号,而不是单引号。

您可能需要多图而不是地图,因为您多次使用相同的键(这不能在地图中完成)。

你可以这样迭代:

for (auto i : myClassMap)
{
    // i.first now holds the first string (key)
    // i.second now holds the second string (value)
}

比如:

    std::multimap<std::string, std::string> myClassMap;
    myClassMap.insert ( std::pair<std::string, std::string>("OverallBaseClass", "DerivedClass1"));
    myClassMap.insert ( std::pair<std::string, std::string>("OverallBaseClass", "DerivedClass2"));
    myClassMap.insert ( std::pair<std::string, std::string>("DerivedClass2", "DerivedClass3") );
    for (auto i : myClassMap)
    {
        cout << i.first << "," << i.second << endl;
    }

将产生:

DerivedClass2,DerivedClass3

OverallBaseClass,DerivedClass1

OverallBaseClass,DerivedClass2

【讨论】:

  • 对不起,你更新我的问题。那是个错误。我只有一个键
  • 好的。我不确定你在问什么。我的代码向您展示了如何迭代地图。缺少什么?
猜你喜欢
  • 1970-01-01
  • 2016-11-06
  • 1970-01-01
  • 1970-01-01
  • 2019-10-18
  • 2017-08-10
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
相关资源
最近更新 更多