170 похожих чатов

Есть map<string,vector<class>> Я хочу вставить в вектор объект, но не факт

что в мэпе существует ключ.

Можно проверить через find, но просто из спортивного интереса - корректно ли обернуть вставку в try/catch?
И если это годная практика - то откуда взять название исключения?

34 ответов

8 просмотров

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

есть insert, emplace и try_emplace, выбирайте на любой вкус

Виктор-Nekrasov Автор вопроса
Sergey Kaniskin
не надо использовать исключения, если можно обойти...

А почему исключений, по возможности, следует избегать? Это неформальное правило оформления кода или как то с производительностью/юзабилити связано?

Виктор Nekrasov
А почему исключений, по возможности, следует избег...

скорее с производительностью, да и try/catch усложняет восприятие кода

Виктор-Nekrasov Автор вопроса
Sergey Kaniskin
скорее с производительностью, да и try/catch услож...

мне казалось быстрее должно быть, т.к. проверка на наличие ключа выполнится гарантированно лишь один раз. Впрочем, нутро это я не знаю, чисто спортивный интерес. Спасибо)

Михаил.
Ну не коды возврата же использовать

именно их и использует стандартная библиотека

Ilya Zviagin
Да он гонит просто.

Ну зачем исключения, чтобы вставить в map с проверкой существования, лол

А при чем тут вообще исключения, с чего они вдруг появятся при вставке в map?

Sergey Kaniskin
Ну зачем исключения, чтобы вставить в map с провер...

Ну ты сказочник, надо было так и написать, а ты выдал сказку. Новичёк прочитает, и не понимая запомнит: "исключения это плохо"

Ilya Zviagin
Ну ты сказочник, надо было так и написать, а ты вы...

Исключения - для исключительных случаев, не для рутинной проверки. Все хорошо к месту

Название исключения взять из документации на используемую функцию или класс. Но расскажи, откуда возьмутся исключения при вставке в map?

Виктор-Nekrasov Автор вопроса
Ilya Zviagin
Название исключения взять из документации на испол...

Я уже потом, при написании, понял что ниоткуда, можно просто брать и вставлять (но это не точно, т.к. написать - написал, но еще не запускал). В пайтоне, говорят, трай/кетчи на каждом шагу используют. Я оттуда и перенёс логику мышления на этот мэп, думал ежели вставить по несуществующему ключу - то строгий си++ заругается. А он, оказывается, не такой уж строгий в отношении мэп оказался.

Виктор Nekrasov
Я уже потом, при написании, понял что ниоткуда, мо...

Си++ в этом плане наоборот даже слишком нестрогий my_map[key] = value сработает независимо от того, есть ли ключ в словаре, что имхо и зря

Виктор-Nekrasov Автор вопроса
Sergey Kaniskin
Си++ в этом плане наоборот даже слишком нестрогий ...

А я написал map[key].push_back(obj) в пустой map. Это же сработает для map<string,vector<class>>? А то я лежу и думаю об этом)

Виктор Nekrasov
А я написал map[key].push_back(obj) в пустой map. ...

Да, сработает. Если key нет, то создастся пустой вектор и запушится в него

Виктор Nekrasov
Я уже потом, при написании, понял что ниоткуда, мо...

Логики ноль тут. Исключения применяться тогда, когда выполнение кода далее невозможно, когда заказанная операция не может быть исполнена. Вот при чтении из map по ключу иногда может быть исключение, а с чего при вставке?

Виктор-Nekrasov Автор вопроса
Ilya Zviagin
Логики ноль тут. Исключения применяться тогда, к...

Предполагаемая мною логика была такова: 1. Си++ любит ругаться 2. Значит, наверняка, заругается если вставить по несуществующему ключу. 3. Значит надо как-нибудь проверять перед вставкой 4. Нафига все эти проверки - сделаем как в питоне трай/кетчем. Ежели ключа нет - сгенерится исключение, тут то мы ключ и добавим, а потом и значение. Заодно сэкономим операцию проверки ифом на каждом цикле.

Виктор Nekrasov
Предполагаемая мною логика была такова: 1. Си++ лю...

"Если вставить по несуществующему ключу" особенно классно звучит.

Виктор-Nekrasov Автор вопроса
Ilya Zviagin
Бред какой...

Почему бред? Тут вот пишут же что зря си++ не ругается в этом случае с мэпом. Значит общая логика мышления хотя бы чуть-чуть но имеет основание.

Виктор Nekrasov
Предполагаемая мною логика была такова: 1. Си++ лю...

Расскажи, где в питоне при вставке в словарь исключения?

Виктор-Nekrasov Автор вопроса
Ilya Zviagin
Расскажи, где в питоне при вставке в словарь исклю...

Не знаю. Я вообще эти мэпы недолюбливаю. Я думал про более общий случай в питоне, что там вместо предварительных доп проверок обычной практикой является использование трай/кетчей

Виктор Nekrasov
Предполагаемая мною логика была такова: 1. Си++ лю...

Нахуа этот гемор в п. 4? Если нет ключа, то будет исключение и тогда мы добавим ключ и значение... Замедлим все (как в питоне) вылетом исключения. Супер решение! Чем не устраивает то, что сделано сейчас в мапе: если нет ключа, он добавится?

d7d1cd
Нахуа этот гемор в п. 4? Если нет ключа, то будет ...

более того, если тебе не нужно это поведение, ты можешь юзать find()

Виктор-Nekrasov Автор вопроса
d7d1cd
Нахуа этот гемор в п. 4? Если нет ключа, то будет ...

Я не говорил что не устраивает. Я предположил, не изучив предварительно документацию, что в c++ процедура добавления элемента в мап требует существования ключа в момент добавления. Т.е. сделал неверное предположение о процедуре добавления элемента не разобравшись в манах. В этом моя недоработка.

Виктор Nekrasov
Я не говорил что не устраивает. Я предположил, не ...

Кто тогда добавит первый элемент, если процедура добавления требует чтобы уже существовал этот ключ?

Виктор-Nekrasov Автор вопроса
Ilya Zviagin
Кто тогда добавит первый элемент, если процедура д...

Я думал что процедура имеет 2 этапа: 1. Объявление ключа 2. Наполнение мапа по существующему ключу

Похожие вопросы

Обсуждают сегодня

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
83
читать файл максимально быстро? странный вопрос))
zamtmn
53
How to create an OS in C? what to study?
Linus
18
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
5
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
Вопрос вроде правильно, но что надо сделать, чтоб текст был виден нормально ? ghci> TE.decodeUtf8 $ TE.encodeUtf8 "test - проба" "test - \1087\1088\1086\1073\1072"
Fedor
7
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
@HemulGM Параметры у AddStream поменялись? Несостыковка какая-то
Катерина Свиридова
12
Карта сайта