我不想通过地图容器编写树类实现。
输入
> S Hugo Laura
> S Hugo Jasper
> S Laura Helena
> S Jasper Maria
> S Laura Elias
> S Helena Sofia
> P Hugo
输出
Hugo
..Laura
....Helena
......Sofia
....Elias
..Jasper
....Maria
我已经有了分裂功能,将Hugo和Laura分成变量。但是我应该如何通过map容器实现Output类型的结果。我应该在地图中使用某种类型的递归或地图,这对我来说听起来很奇怪(无尽的地图)。 提前谢谢。
答案 0 :(得分:0)
以下是一种可能的解决方案,使用multimap
。你不必复制它,但作为一个例子,你可以随意使用它。 Multimap允许使用重复键,您可以使用equal_range
方法进行查询。通过使用map值作为下一个节点并结合递归函数,可以生成所需的确切结果:
#include <iostream>
#include <string>
#include <map>
void explore (std::multimap<std::string, std::string> const &tree, std::string const &key, int level)
{
level+=2;
auto range = tree.equal_range(key);
for (auto it = range.first; it != range.second; ++it)
{
std::cout << std::string(level, '.') << it->second << std::endl;
explore(tree, it->second, level);
}
}
int main()
{
std::multimap<std::string, std::string> tree =
{
{ "Hugo", "Laura" },
{ "Hugo", "Jasper" },
{ "Laura", "Helena" },
{ "Jasper", "Maria" },
{ "Laura", "Elias" },
{ "Helena", "Sofia" }
};
std::string root = "Hugo";
std::cout << root << std::endl;
explore(tree, root, 0);
return 0;
}