在多重映射中查找键值链的长度
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;
}
我有一个网络程序,可以让用户将 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;
}