树类通过地图实现

时间:2018-02-05 18:19:38

标签: c++ dictionary tree

我不想通过地图容器编写树类实现。

输入

> 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类型的结果。我应该在地图中使用某种类型的递归或地图,这对我来说听起来很奇怪(无尽的地图)。 提前谢谢。

1 个答案:

答案 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;
}

https://ideone.com/HywQo9