Мне кажется, я понял, что вы пытаетесь сделать.Я не понимаю, что вы подразумеваете под "не пройдя последний цикл".Код, как есть, выглядит хорошо.Однако карты не должны использоваться в этом примере по моему мнению.Кроме того, кажется, что есть ненужные копии, распределение векторов, ... Но давайте рассмотрим все это вне области видимости.
Скорее всего, ваши данные неправильно загружены в ваши карты (вы не показываете, как вызагрузить данные из входных файлов).Это также может объяснить, почему ваше время в пути установлено на 0: вы инициализируете int travel_time=0;
, и если элементы не найдены в connections_hashmap
, или в j.second
, или если ((i.first==_start)&&(i.second==_end))
возвращает false
, то travel_time
останется равным 0 и будет вставлено в vector
, которое вы возвращаете.
Я попробовал этот небольшой пример, чтобы показать, что ваш код должен работать при условии, что ваши данные загружены правильно, и вы вызываете свои функции с правильнымаргументы start
и end
(вы должны добавить некоторые исключения или поведение по умолчанию - поведение по умолчанию в текущем коде устанавливает ваше время на 0).
// time, start, end
std::unordered_map<int,std::unordered_map<int,int>> connections;
std::vector<std::pair<int,int>> compute_travel(int start, int end)
{
std::vector<std::pair<int,int>> vect;
int travel_time=0;
// what if connections is empty?
for(const auto& [time,connectedStations] : connections)
{
// what if connectedStations is empty?
for(const auto& [s,e] : connectedStations)
{
if ( s == start && e == end)
travel_time = time;
else // and what happens here?
std::cout<< "Erreur" << std::endl;
}
}
vect.push_back(std::make_pair(start,travel_time));
return vect;
}
std::vector<std::pair<int,int> > compute_and_display_travel(int start, int end)
{
std::vector<std::pair<int,int> > vect = compute_travel(start,end);
for(const auto& i : vect)
std::cout << "depart station: " << i.first << ", time: " << i.second << std::endl;
return vect;
}
int main()
{
// 4 mins from station 1 to station 2
connections[4][1] = 2;
compute_and_display_travel(1,2);
return 0;
}
// output: depart station: 1, time: 4