Запись значений в контейнер map

Есть определенного размера std::list<int> lis, который заполнен значениями, а также есть std::map<int, bool> mp. Мне нужно заполнить ключи mp значениями из lis, а также проверить их на свойство и результат записать в значения mp. Как это можно осуществить?


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

Автор решения: S.H.

Вообще говоря, как я понимаю вопрос - он довольно простой, и в основном - на синтаксис языка и простейшие операции с контейнерами.

Предложу такое решение (и с удовольствием выслушаю критику, так как никто не идеален, а уж я и подавно):

    #include <iostream>
    #include <fstream>
    #include <map>
    #include <list>

    using namespace std;

    bool check_property(int n){
        return n%2==0;
    }

    int main(){
        ifstream ifs("input.txt");
        list<int> lis;
        int n;
        do {
            ifs >> n;
            lis.push_back(n);
        } while (!ifs.eof());
        cout << "lis size=" << lis.size() << endl;

        map<int, bool> mp;
        for( auto& x : lis)
            mp[x]=check_property(x);

        for( const auto& item : mp )
            cout << "mp[" << item.first << "] = " << item.second << endl;
    }

Здесь происходит заполнение контейнера из файла, потом проверчяется условие "число - четное", потом печатается состояние mp. Правда, я не рассматриваю случай, когда данные в lis повторяются (впротчем, к ошибке это не приведет)

Пример файла input.txt:

    1
    12
    65
    13
    2
    7
    81
    4
    71
    6

Пример вывода программы:

    lis size=10
    mp[1] = 0
    mp[2] = 1
    mp[4] = 1
    mp[6] = 1
    mp[7] = 0
    mp[12] = 1
    mp[13] = 0
    mp[65] = 0
    mp[71] = 0
    mp[81] = 0

Но, вообще говоря, Вы рискуете, что Ваш вопрос будет закрыт, потому что "учебные задания допустимы только в случае, если вместе с вопросом приведена попытка решения".

→ Ссылка