Нужна помощь с вводом C++

Есть задача:

Дан список стран и городов каждой страны. Затем даны названия городов. Для каждого города укажите, в какой стране он находится.

Входные данные Программа получает на вход количество стран N. Далее идет N строк, каждая строка начинается с названия страны, затем идут названия городов этой страны. В следующей строке записано число M, далее идут M запросов — названия каких-то M городов, перечисленных выше.

Примеры

входные данные

2

Russia Moscow Petersburg Novgorod Kaluga

Ukraine Kiev Donetsk Odessa

3

Odessa

Moscow

Novgorod

Идейно понятно что делать, но без понятия как осуществить ввод данных. Т.е. надо N раз считывать неограниченное количество строк, как это сделать?


Ответы (2 шт):

Автор решения: Harry

N раз считывать строку из неограниченного количества слов, а это уже совсем другое.

cin >> N;
for(int i = 0; i < N; ++i)
{
    string s;
    getline(cin,s);

    // а вот тут уже разобрать строку s на название страны и города.

Как разбирать строку? Ну, я бы использовал istringstream, типа

istringstream ss(s);
s >> country;
while(s>>city) { /* работа с очередным городом */ }

Примерно так...

→ Ссылка
Автор решения: E_d_u_a_r_d

#include <iostream>
#include <vector>
#include <queue>
#include <string>

using namespace std;

int main() {

    int n;
    cin >> n;

    queue<pair<string, vector<string>>> q;

    for (int i = 0; i < n; i++) {

        pair<string, vector<string>> p;

        getline(cin, p.first);

        string s;
        getline(cin, s);

        string k = "";

        for (int j = 0; j < s.length(); j++) {

            if (s[j] != ' ') {
                k += s[j];
            }
            else {

                p.second.push_back(k);
                k = "";
                j += 2;

            }

        }

        q.push(p);

    }

    return 0;
}

Этот код дает тебе очередь с pair первая переменная это название страны, вторая переменная является вектором содержащим список городов.

→ Ссылка