我正在尝试用地图构建一棵树,用基类和原始类来显示一个类层次结构。一个节点可以有多个子节点和子子节点
这是我的代码:
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);
}
我可以调用并将子项添加到树中。 现在我的问题是,如何通过地图迭代,并将子项添加到我的树中,因此它出现了一个类层次结构
答案 0 :(得分:0)
首先要记住字符串需要双引号 - 而不是单引号。
您可能需要多个地图而不是地图,因为您多次使用相同的密钥(在地图中无法完成)。
你可以像这样迭代:
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