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

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

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

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

34 ответов

23 просмотра

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

есть 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. Наполнение мапа по существующему ключу

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта