У меня есть сетевая программа, которая позволяет пользователю добавлять 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 ??
Я почти уверен, что упускаю что-то простое, но я занимался этим некоторое время, я не могу думать прямо.