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

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


如果我要打印约翰的锁链,那么我将得到以下内容。

> 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 ??


我很确定我缺少一些简单的东西,但是我已经有一段时间了,我想不通。

最佳答案

此代码返回6:

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

关于c++ - 在 multimap 中找到键值链的长度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58437274/

10-13 09:49