У меня проблемы с поиском добавления второго вектора на рейс.Например, когда я достигаю sfo lax 89 в файле данных, lax 89 не добавляется в sfo в unordered_map.
Тестовые данные:
stl jfk 99
ord jfk 199
cle jfk 179
sfo jfk 388
sfo lax 89
stl cle 77
lax cle 30
sfo stl 200
ord stl 99
Я пытался прочитать вводфайл, который находит все пары, связанные с ключом, и это тоже не сработало.Я знаю, что это будет работать правильно, если я смогу получить все свои данные в неупорядоченной карте.Но я действительно не уверен, как это сделать.
Я пытаюсь заставить мои сохраненные данные выглядеть следующим образом.
unordered_map<string, unordered_map<string, int>> vertices;
stl {jfk 99, cle 179}
ord {jfk 199, stl 99}
cle {jfk 179}
sfo {jfk 388, lax 89, stl 200}
lax {cle 30}
Я пытался использовать temp для хранения второго unordered_mapв вершинах с помощью temp.insert () для хранения рейсов, вылетающих из заданного аэропорта, со стоимостью.Затем, используя функцию add_vertex (), которую я создал.
Я знаю, что остальная часть кода работает, но мне нужно сначала жестко закодировать данные, чтобы проверить их.Но мне нужно иметь возможность читать эти данные из файла.
class Flight {
public:
unordered_map<string, unordered_map<string, int>> vertices;
int cost;
void add_vertex(string name, unordered_map<string, int>& edges){
// Insert the connected nodes in unordered map
vertices.insert(unordered_map<string, unordered_map<string, int>>::value_type(name, edges));
}
};
void readData(ifstream &data2 , Flight &f, Flight &c) {
while (true) {
string
departure, // departure loc
departureK,
arrival, // arrival loc
arrivalk;
string arrivals[250];
int costs[250];
int cost, costK; // cost
int size = 0;
int pos;
data2 >> departureK;
if (data2.eof()) {
return;
}
data2 >> arrivalk;
data2 >> costK;
pos = data2.tellg();
unordered_map<string, int> temp;
temp.insert(unordered_map<string, int>::value_type(arrivalk, costK));
bool run = true;
while (run) {
data2 >> departure;
if (data2.eof()) {
run = false;
return;
}
data2 >> arrival;
data2 >> cost;
if (departureK == departure) {
arrivals[size] = arrival;
costs[size] = cost;
size++;
}
}
for (int i = 0; i < size; i++) {
temp.insert(unordered_map<string, int>::value_type(arrivals[i], costs[i]));
}
f.add_vertex(departureK, temp);
c.add_vertex(departureK, temp);
temp.clear();
size = 0;
data2.seekg(pos);
/*data2 >> departure;
if (data2.eof()) {
return;
}
data2 >> arrival;
data2 >> cost;
unordered_map<string, int> temp;
temp.insert(unordered_map<string, int>::value_type(arrival, cost));
f.add_vertex(departure, temp);
c.add_vertex(departure, temp);
temp.clear();*/
}
}
int main() {
ifstream data2;
char fileName[25]; // a string for filenames
data2.clear();
cout << "Please enter the name of the input file: ";
cin >> fileName;
data2.open(fileName, ios::in);
if (!data2) {
cerr << "Can't open input file " << fileName << endl;
exit(1);
}
// checks file
Flight f, c;
readData(data2, f, c);
}