Загрузка данных


Код:

#include <iostream>
#include <string>
#include <map>
#include <set>
#include <limits>
using namespace std;

int main() {
    int n;
    cin >> n;
    cin.ignore(numeric_limits<streamsize>::max(), '\n');

    map<string, set<string> > slovar;

    for (int i = 0; i < n; i++) {
        string s;
        getline(cin, s);

        int p = s.find(" - ");
        string eng = s.substr(0, p);
        string lat = s.substr(p + 3);

        int start = 0;

        while (true) {
            int pos = lat.find(", ", start);
            string word;

            if (pos == -1) {
                word = lat.substr(start);
                slovar[word].insert(eng);
                break;
            }
            else {
                word = lat.substr(start, pos - start);
                slovar[word].insert(eng);
                start = pos + 2;
            }
        }
    }

    cout << slovar.size() << endl;

    for (auto x : slovar) {
        cout << x.first << " - ";

        bool first = true;

        for (auto y : x.second) {
            if (!first) {
                cout << ", ";
            }

            cout << y;
            first = false;
        }

        cout << endl;
    }

    return 0;
}

Что происходит текстом

Начало работы программы.
Сначала вводится число n — количество английских слов в словаре.

Далее программа считывает n строк.
В каждой строке есть английское слово, знак - и список латинских переводов.

Например:

apple - malum, pomum, popula

Программа отделяет английское слово от латинских переводов.
Английское слово здесь — apple.

Затем программа разбивает список переводов по запятой.
Получаются латинские слова:

malum
pomum
popula

Для каждого латинского слова программа запоминает, от какого английского слова оно произошло.
Например:

malum - apple
pomum - apple
popula - apple

Если одно латинское слово встречается у нескольких английских слов, все эти английские слова добавляются в список переводов.

Для хранения используется словарь map.
Он автоматически сортирует латинские слова по алфавиту.

Для английских слов используется set.
Он тоже автоматически хранит слова без повторов и в отсортированном порядке.

После обработки всех строк программа выводит количество латинских слов.
Затем выводит новый латинско-английский словарь в нужном формате:

латинское слово - английский перевод

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

Конец работы программы.