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

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

08.09.2017, 23:56. Показов 19600. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru