Как принять пользовательский ввод в карты и мультикарты? - PullRequest
0 голосов
/ 10 марта 2020

Я только что изучил мультикарты (рабочие и другие связанные вещи). Здесь я нашел этот фрагмент кода

gquiz1.insert(pair <int, int> (5, 40)); 
gquiz1.insert(pair <int, int> (4, 30)); 
gquiz1.insert(pair <int, int> (3, 60)); 
gquiz1.insert(pair <int, int> (1, 20)); 
gquiz1.insert(pair <int, int> (5, 50)); 
gquiz1.insert(pair <int, int> (6, 50)); 
gquiz1.insert(pair <int, int> (6, 10)); 

, но мне было интересно, что если пользователь захочет ввести значение ключа и данных во время выполнения, несмотря на статическую выдачу. Я новичок в STL. Помогите, пожалуйста, как мне получить значения приведенного выше кода во время выполнения, несмотря на статическую выдачу?

Ответы [ 2 ]

1 голос
/ 10 марта 2020

Фактически единственное, что вам нужно сделать, - это заменить целочисленные литералы

gquiz1.insert(pair <int, int> (5, 40));

на переменные

gquiz1.insert(pair <int, int> (key, value));

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

Вот демонстрационная программа, которая использует два метода emplace и insert.

#include <iostream>
#include <map>

int main() 
{
    std::multimap<int, int> m;

    int key, value;

    key = 5; value = 40;

    m.emplace( key, value );

    key = 4; value = 30;

    m.insert( { key, value } );

    for ( const auto &item : m )
    {
        std::cout << "{ " << item.first << ", " << item.second << " } ";
    }
    std::cout << '\n';

    return 0;
}

Выходные данные программы

{ 4, 30 } { 5, 40 } 
1 голос
/ 10 марта 2020

Конечно, это возможно:

int main()
{
    std::multimap<int, int> gquiz1;
    int key, val;
    std::cin >> key >> val;
    gquiz1.insert(std::pair<int, int>(key, val));

    //print map content
    for(const auto& elem: gquiz1)
    {
        std::cout << elem.first << " " << elem.second << "\n";
    }
}

Попробуйте онлайн


std::multimap (или любой другой контейнер) не волнует, где ввод из. Программист должен знать, откуда должны поступать данные, передавать их в контейнер и использовать их позже. Литерал - это один из вариантов, если вам нужна постоянная, которая никогда не меняется. Вы также можете что-то вычислить, прочитать ввод от пользователя, из файла, из базы данных, из Inte rnet или из любого места, к которому у вашей программы есть доступ.

...