С++ std::map заполнение из файла

177
19 февраля 2019, 05:20

Есть вот такой вот map

static std::map<std::string, uint32_t> g_targets = {
{ "Shaggy Dog", 17939 },
{ "Chubby Dog", 17966 },
{ "Panda", 18098 },
{ "Snowball", 18426 },
{ "Crow", 18439 },
{ "Horse", 21012 },
{ "Horn Bow +0", 13138 },    
};

Как мне содержимое g_targets заполнить из файла? На просторах интернет нашел вот такой вот код

std::ifstream myFile("D:\\Myfile.txt");
    std::string key;
    uint32_t value;
    if (!myFile.is_open()) std:: cout << "Error opening file\n"; // если не открылся
    else if (myFile.peek() == EOF) std:: cout << "This file is empty\n"; // если первый символ конец файла
    else std:: cout << "\nAll OK! File is open!\n\n";
    static std::map<std::string, uint32_t> g_targets;
        while (myFile >> key >> value)          
            g_targets[key] = value;         
        for (auto& p : g_targets)
        {
            std::cout << p.first << p.second << "\n";
        }

    for (auto const& target : g_targets){...}

Пока что моя попытка подстроить под себя ничем не увенчалась. Показывает в цикле, что файл открыт нормально и на этом все. Я понимаю, что это топорная работа и где то, что то не досмотрел. Но на данный момент не понял, где и что. Так же сомневаюсь, что правильно сделал цикл for, для вывода в консоль прочтенного из файла.

Answer 1

Для чтения файла есть std::basic_ifstream. Для добавления записи в std::map<> есть множество методов. В цикле добавляете все нужные записи, в чём проблема?

upd:

std::ifstream infile("название_файла");
std::string key;
uint32_t value;
std::map<std::string, uint32_t> myMap;
while (infile >> key >> value)
    myMap[key] = value;
READ ALSO
Найти повторяющиеся символы в строке

Найти повторяющиеся символы в строке

Само задание звучит так:

151
Что изменить в программе? Не могу додумать

Что изменить в программе? Не могу додумать

Есть класс часы и статический атрибут часовой поясНеобходимо перевести все часы

216
Сохранить текущее состояние окон в emacs

Сохранить текущее состояние окон в emacs

Экран разбит на 3 окна вертикально, и крайнее левое вертикальное окно разбито на 2 окна горизонтально(вверху occur, внизу shell)Как сохранить это...

132
Исключение в c++

Исключение в c++

Написана одна программа на с++,где есть вот такая функция

122