我有一个联网程序,允许用户将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/