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

Как добавить ключ и несколько элементов в словарь?

07.09.2017, 23:16. Показов 9754. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно добавить элементы в словарь, ключ и элементы не знаем до ввода. Вот код:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <map>
#include <set>
#include <string>
int main()
{
    int n;
    std::cin >> n;
    std::string st, en, sl;
    std::map <std::string, std::set <std::string>> s;
    getline(std::cin, st);
    for (int i = 0; i < n; i++)
    {
        getline(std::cin, st);
        en = st.substr(0, st.find(" "));
        st = st.substr(st.find("-") + 2, st.size() - st.find("-") - 2);
        if (st.find(" ") != -1)
        {
            for (int j = 0; j <= st.find_last_of(" "); j += sl.length + 1)      //проход до последнего слова
            {
                sl = st.substr(j, st.find(",", j + 1) - j);
                st = st.substr(sl.length + 2, st.length - sl.length - 2);
                s[sl].insert(en);
            }
            s[st].insert(en);
        }
        else
            s[st].insert(en);
    }
    for (auto now : s)
        std::cout << now.first << " - " << now.second << "\n";
}

В конце ошибка "отсутствует оператор "<<", соответствующий этим операндам". Как это исправить? И правильно ли я ввожу элементы в словарь?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.09.2017, 23:16
Ответы с готовыми решениями:

Добавить сразу несколько элементов в начало вектора
как добавить НЕСКОЛЬКО РАЗОМ элементов в начало? без цикла(т.к. 200 раз это долго)

Как добавить несколько элементов в окно через C#
Проблемка такая, как в окне создать несколько элементов. Добавляю так: this.Content = myPath; this.Content = myEllipse; Но...

Как добавить в коллекцию List<string> из ListBox несколько элементов
Как добавить в коллекцию List из ListBox несколько слов в том случае если вхождения строки содержатся в одной из строк ListBoxa. Т.е....

4
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
07.09.2017, 23:29
Вместо
C++
1
2
    for (auto now : s)
        std::cout << now.first << " - " << now.second << "\n";
подставить
C++
1
2
3
4
5
6
    for (const auto &now : s)
    {
        std::cout << now.first << std::endl;
        for (auto element : now.second)
            std::cout << element << std::endl;
    }
И вдогонку, std::string::length() - метод класса, а не свойство.
1
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
08.09.2017, 05:51
Цитата Сообщение от Juicer Посмотреть сообщение
В конце ошибка "отсутствует оператор "<<", соответствующий этим операндам".
ну и что в этом непонятного?
всё же из ошибки ясно, компилятор не может найти operator << для std::set<std::string>, потому что его не существует в стандартной библиотеке, а вы его самостоятельно не перегрузили.
0
0 / 0 / 1
Регистрация: 25.11.2016
Сообщений: 60
09.09.2017, 08:12  [ТС]
Спасибо, но появилось ещё одно условие: нужно, если после дефиса несколько слов(в now.second), выводить их через запятую и пробел(после последнего слова их нет), не получается сделать.

Добавлено через 9 часов 37 минут
Всё, сделал, в общем:
C++
1
2
3
4
                auto d = now.second.begin();            
        std::cout << *d;
        d++;
        for (; d != now.second.end(); d++)
0
Каждому свое
 Аватар для Bretbas
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
09.09.2017, 08:42
Juicer, Не надо создавать одни и те же темы!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    for( const auto& word : revDictionary )
    {
        const auto& key = word.first;
        const auto& translation = word.second;
        cout << key << " - ";
        for( auto i = 0; i < translation.size(); i++ )
        {
            cout << translation[i];
            if( i < translation.size() - 1 )
                cout << ", ";
          
        }
        cout << endl;
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.09.2017, 08:42
Помогаю со студенческими работами здесь

Как добавить колекцию SortedSet в словарь
Dictionary&lt;string, SortedSet&lt;DateTime&gt;&gt;test= new Dictionary&lt;string, SortedSet&lt;DateTime&gt;&gt;(); SortedSet&lt;DateTime&gt; date = new...

Как добавить слово в Словарь (Word)
Вопрос в теме.

Как добавить внешний ключ?
Здравствуйте. Есть гостевая. В БД есть 2 таблицы - зарегистрированные пользователи(табл.1 reg_users) + ихние сообщения(табл.2 message)....

Как добавить ключ компилятора?
сабж для g++ -std=c++11

Django как добавить СЛОВАРЬ в свой(или во вьюшкин) контекст?
собсно. Django 1.10 Хочу &quot;обсчитать&quot; некоторые штуки по моделям и использовать их в шаблонах, но так чтобы обсчеты были не в каждой...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru