在多重映射中查找键值链的长度

Find the length of a key, value chain in a multimap

我有一个网络程序,可以让用户将 2 个人添加到多地图。关键是招聘人员,价值是他们增加的人,价值可以增加另一个人,依此类推。这是一个例子

> add john mary
> add john tom
> add mary brad
> add tom Maria
> add mary Eli
> add brad Sofia

如果我要打印 john 的链条,那么我会得到以下内容。

> p john
john
..mary
....brad
......sofia
....eli
..tom
....maria

我需要找到一种计算链条长度的方法。在这种情况下,约翰链的长度为 6,玛丽的长度为 3。

这就是我打印链条的方式

void print_subnet(std::multimap<std::string, std::string>networkMap, std::string id, size_t count=2)
{
    for(auto itr = networkMap.begin(); itr != networkMap.end(); ++itr)
    {
        if(itr ->first == id)
        {
            std::cout << std::string(count, '.') << itr -> second << std::endl;
            print_subnet(networkMap, itr->second, count+2);
        }

    }
}

我按照类似的逻辑得到了链长。

这是我的代码。

 int count_size(std::multimap<std::string, std::string>networkMap, std::string id, int count)
    {
        for(auto itr = networkMap.begin(); itr != networkMap.end(); ++itr)
        {
            if(itr->first == id)
              {
                count += networkMap.count(id);
                count_size(networkMap, itr->second, count);
            }
        }
        return count;
    }

我得到答案 4,而它应该是 6。我打印了计数值,这就是我得到的结果。

2 (2 from john)
4 (2 from mary)
5 (1 from brad)
6 (1 from tom)
4 ??
5 ??
4 ??

我很确定我遗漏了一些简单的东西,但我已经做了一段时间,我无法理清思路。

此代码returns6:

void count_size_recursive(std::multimap<std::string, std::string>networkMap, std::string id, int& count)
{
  for(auto itr = networkMap.begin(); itr != networkMap.end(); ++itr)
  {
    if(itr->first == id)
    {
      ++count;
      count_size_recursive(networkMap, itr->second, count);
    }
  }
}

int count_size(std::multimap<std::string, std::string>networkMap, std::string id)
{
  int count = 0;
  count_size_recursive(networkMap, id, count);
  return count;
}