Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/103: Рейтинг темы: голосов - 103, средняя оценка - 4.71
1 / 1 / 1
Регистрация: 27.08.2016
Сообщений: 27

Создать словарь с использованием map

08.09.2017, 23:56. Показов 19640. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот задание:
Входные данные

В первой строке содержится единственное целое число N — количество английских слов в словаре. Далее следует N описаний. Каждое описание содержится в отдельной строке, в которой записано сначала английское слово, затем отделённый пробелами дефис (символ номер 45), затем разделённые запятыми с пробелами переводы этого английского слова на латинский. Переводы отсортированы в лексикографическом порядке. Порядок следования английских слов в словаре также лексикографический.
Все слова состоят только из маленьких латинских букв, длина каждого слова не превосходит 15 символов. Общее количество слов на входе не превышает 100000.

Выходные данные
В первой строке программа должна вывести количество слов в соответствующем данному*латинско-английском словаре. Со второй строки выведите сам словарь, в точности соблюдая формат входных данных. В частности, первым должен идти перевод лексикографически минимального латинского слова, далее — второго в этом порядке и т.д. Внутри перевода английские слова должны быть также отсортированы лексикографически.
Sample Input:
3
apple - malum, pomum, popula
fruit - baca, bacca, popum
punishment - malum, multa
Sample Output:
7
baca - fruit
bacca - fruit
malum - apple, punishment
multa - punishment
pomum - apple
popula - apple
popum - fruit

Вот мой код (вначале я разбиваю строку и добавляю ключ и значение в словарь)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <map>
#include <string>
#include <vector>
using namespace std;
 
int main() {
    map <string, vector <string>> s;
    vector <string> v(100000);
    int n;
    cin >> n;
    int ind, nachalo = 0;
    string a, b, c;
    int count = 0;
    for (int i = 0; i <= n; i++){
        ind = 0;
        getline(cin, b);
        int j = 0;
        while (b[j] != '\0'){
            if (b[j] >= 65 && b[j] <= 90 || b[j] >= 97 && b[j] <= 122) {}
            else{
                if (b[j] == '-'){
 
                    a = b.substr(0, j - 1);
                }
                if (b[j] == ' '){
                    nachalo = j;
                }
                if (b[j] == ','){
                    c = b.substr((nachalo + 1), (j - nachalo - 1));
                    s[c].push_back(a);
                    count++;
                }
            }
            j++;
        }
        if (b[j] == '\0' && b.size() != 0){
            c = b.substr(nachalo + 1, j - nachalo - 1);
            s[c].push_back(a);
            count++;
        }
    }
    for (auto now : s){
        for (auto now1 : now.second){
            cout << now.first << " - " << now1 << endl;
        }
    }
}
При таких входных данных :
3
abc - aa, bb, cc
abcd - aa, asd
hghg - ss, cc
Ответ должен быть (опустим вывод кол-ва слов):
aa - abc, abcd
asd - abcd
bb - abc
cc - abc, hghg
ss - hghg
Но у меня Вывод следующий:
aa - abc
aa - abcd
asd - abcd
bb - abc
cc - abc
cc - hghg
ss - hghg

Как я понимаю, в map`е ключи могут быть только уникальными, тут возникает вопрос: либо я вывожу неправильно(подскажите как правильно), либо неправильно добавляю значения для ключа (опять же, подскажите как правильно) либо мой ключ становится "уникальным" в зависимости от значения(в это слабо верится), либо ошибка в чём-то другом. Помогите разобраться
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.09.2017, 23:56
Ответы с готовыми решениями:

Словарь map
1) Необходимо создать словарь map на основании информации из файла data.txt. Структура файла соответствует полям struct из задания....

Словарь map<string, vector<int> (n)>
Нужно, чтобы при объявлении ключа в словаре создавался vector&lt;int&gt; из n элементов Грубо говоря int n; cin &gt;&gt; n; ...

Создать словарь (Map<String, String>) занести в него десять записей по принципу «фамилия» - «имя».
/* Удалить людей, имеющих одинаковые имена Создать словарь (Map&lt;String, String&gt;) занести в него десять записей по принципу «фамилия» -...

2
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
09.09.2017, 00:17
del

Добавлено через 5 минут
Цитата Сообщение от Garfield01 Посмотреть сообщение
либо я вывожу неправильно
C++
1
2
3
4
5
6
7
8
9
10
    for (auto now : s){
        string temp = "";
        temp += now.first;
        temp += " - ";
        for (auto now1 : now.second){
            temp += now1;
            temp += ", ";
        }
        cout << temp << endl;
    }
0
Каждому свое
 Аватар для Bretbas
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
09.09.2017, 08:35
Так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>
#include <map>
#include <vector>
#include <string>
 
int main()
{
    using namespace std;
    
    map<string, vector<string>> dictionary;
    int n;
    
    cout << "Enter count of dictionary words: ";
    cin >> n;
    
    for( auto i = 0; i < n; i++ )
    {
        string word;
        vector<string> translation;
        int k;
        cout << "Enter " << i + 1 << " word: ";
        cin >> word;
        cout << "Enter number of translation of the word: ";
        cin >> k;
        for( auto j = 0; j < k; j++ )
        {
            string translate;
            cout << "Enter " << j + 1 << " translation: ";
            cin >> translate;
            translation.push_back( translate );
        }
        
        dictionary.insert( pair<string, vector<string>>( word, translation ) );
    }
    
    map<string, vector<string>> revDictionary;
    for( const auto& word : dictionary )
    {
        const auto& key = word.first;
        const auto& translation = word.second;
        
        for( const auto& translate : translation )
        {
            auto it = revDictionary.find( translate );
            if( it != revDictionary.end() )
                it -> second.push_back( key );
            else
            {
                vector<string> words;
                words.push_back( key );
                revDictionary.insert( pair<string, vector<string>>( translate, words ) );
            }
        }
    }
    
    for( const auto& word : revDictionary )
    {
        const auto& key = word.first;
        const auto& translation = word.second;
        cout << key << " - ";
        for( const auto& translate : translation )
         cout << translate << ", ";
        cout << endl;
    }
    
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.09.2017, 08:35
Помогаю со студенческими работами здесь

Map Словарь
Пишу програму - словарь англо-русский. У меня возникли проблемы с написанием самого класса MAP, в виде которого я хочу представить сам...

Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std::map?
Здравствуйте. Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std map? Например: std::map...

Частотный словарь с использованием дерева
Задача: определить понятие слово, прочитать текст и сформировать набор слов данного языка вместе с информацией о частоте их встречаемости,...

Метод с использованием map
Здравствуйте! У меня такая задача - на вход я принимаю map c стринговыми данными. Ключем является юзернейм, а значением пароль. Должен быть...

Русско-английский словарь с использованием Tkinter!
Помогите доделать русско-английский словарь на Python с использованием Tkinter. Не занимаюсь программированием, но курсовую работу нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru