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

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

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

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

34 ответов

19 просмотров

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

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

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

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

Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
А вот это что за конструкция? Вернее, она тут нафига?
Serjone
10
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Мужики. привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных элементов...
Kraszx
2
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Всем привет! Кто пользуется DevExpress, подскажите пожалуйста, реализован ли в TcxGrid в новых версиях поиск по датам как в Экселе (ну т.е. не просто список чекбоксов со значе...
A Z
4
Карта сайта