Как вставить пары в карту на основе пользовательского ввода, а затем найти элемент, связанный с ключом, данным пользователем? - PullRequest
0 голосов
/ 26 мая 2018

Следующий код не работает, если я добавлю деталь, чтобы найти элемент.Без этой части первая часть кода работает для добавления и отображения элементов stl::map

    #include<iostream>
    #include<map>
    #include<utility>

    using namespace std;

    int main()
    {
        int n, k, q;
        char *v;
        map<int, char*> m1;
        map<int, char*>::iterator it;
        cout << "enter number of elements\n";
        cin >> n;
        cout << "enter number and string- \n";
        for(int i=0; i<n; i++)
        {
            cin >> k;
            cin >> v;
            m1.insert(pair<int, char*>(k, v));
        }
        cout << "elements are- " << endl;
        for (it=m1.begin(); it!=m1.end(); it++)
            cout << it->first << " " << it->second << "\n";

    /* if the code is kept up to this and compiled,
       the map elements are displayed. If the following code is added
       to find the element, the application crashes just after taking
       an input to fill the map */

        cout << "enter a key to find element\n";
        cin >> q;
        it = m1.find(q);
        if(it!=m1.end())
        cout << it->first << " " << it->second ;
        else
            cout << "key was not found\n";

        return 0;
    }

1 Ответ

0 голосов
/ 27 мая 2018

Измените char* на string.char* является висящим указателем.Это не относится к выделенному буферу.Изменение на string будет динамически обрабатывать все детали.

Изменить m1.insert(pair<int, char*>(k, v)); на m1[k] = v;.Последний способ изменения карты и доступа к ней является одной из причин использования карты: для синтаксического удобства.Ничего «плохого» с первым способом, но он более печатный и менее понятный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...