C ++ читать 2 строки в то время l oop на карту? - PullRequest
0 голосов
/ 11 февраля 2020

Итак, у меня есть текстовый файл, который отформатирован с ключом на одной строке и значением на следующей строке. Я новичок в c ++, и у меня возникли проблемы с поиском способа чтения двух строк в переменные и назначения их в карте.

Поэтому открываемый текстовый файл имеет следующий формат:

China
Asia
Canada
North America
Egypt
Africa
et c ...

Я пытаюсь перебрать строки с некоторым временем l oop, чтобы назначить Китай в качестве ключа и Азию в качестве значения, а затем в Канаду и Северную Америку и так далее. Я написал немного кода, который сейчас не работает, так как я не знаю, как перебирать строки. Любой совет очень важен, особенно потому, что я знаю, что это может быть глупый вопрос, я просто не могу найти в Интернете ничего, что действительно ответило бы на это.

CountryCatalogue::CountryCatalogue(std::string continentFileName, std::string countryFileName)
{
    std::ifstream continentFile(continentFileName);
    std::ifstream countryFile(countryFileName);
    std::string line;
    std::map<std::string, std::string> mymap;

    if (continentFile.is_open()) {
        while (std::getline(continentFile, line)) {
            mymap[line] = ??????
        }
        continentFile.close();
    }

1 Ответ

3 голосов
/ 11 февраля 2020

Просто вызовите std::getline для правильного ключа на карте:

// rest of code omitted
while (std::getline(continentFile, line)) {
    std::getline(continentFile, mymap[line]);
}

Это работает, потому что mymap[line] автоматически оживляет значение с помощью конструктора по умолчанию и возвращает ссылку на новый string, который затем может быть передан по ссылке в getline.

. Для обработки возможности ключа без значения вы можете протестировать оба getline с, например:

// rest of code omitted
while (std::getline(continentFile, line)) {
    if (!std::getline(continentFile, mymap[line])) {
        // Mismatch between keys and values, maybe emit warning
        mymap.erase(line); // Remove key which lacked value
        break; // Exhausted file
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...