Size: a a a

2020 July 22

АВ

Александр Водянников... in supapro.cxx
А чем find смущает ?
источник

ПК

Побитый Кирпич... in supapro.cxx
tamtakoe
Подскажите, как лучше вставить в мапу ключ с дефолтным значением, если такого колюча нет. Пока так делаю, но смущает постоянный вызов find. Может быстрее в try-catch завернуть и при ошибке сетить дефолтное значение?
using Item = map<string, variant<string, double>>;
Item item = {{"a", 1}};

if (item.find("b") == item.end()) {
   item["b"] = 0;
}
Можешь find на count заменить. Это почти как contains только имя другое
источник

BB

Bohdan Bessonov in supapro.cxx
tamtakoe
Подскажите, как лучше вставить в мапу ключ с дефолтным значением, если такого колюча нет. Пока так делаю, но смущает постоянный вызов find. Может быстрее в try-catch завернуть и при ошибке сетить дефолтное значение?
using Item = map<string, variant<string, double>>;
Item item = {{"a", 1}};

if (item.find("b") == item.end()) {
   item["b"] = 0;
}
Норм практика в плюсах с find
источник

ПК

Побитый Кирпич... in supapro.cxx
tamtakoe
Подскажите, как лучше вставить в мапу ключ с дефолтным значением, если такого колюча нет. Пока так делаю, но смущает постоянный вызов find. Может быстрее в try-catch завернуть и при ошибке сетить дефолтное значение?
using Item = map<string, variant<string, double>>;
Item item = {{"a", 1}};

if (item.find("b") == item.end()) {
   item["b"] = 0;
}
Ну и исключения тебе тут ничего не дадут по скорости, а только медленнее сделают
источник

t

tamtakoe in supapro.cxx
Bohdan Bessonov
Норм практика в плюсах с find
Если норм, то норм. Просто уточнил)
источник

D

Danya in supapro.cxx
tamtakoe
Если норм, то норм. Просто уточнил)
Можешь написать свою функцию contains
источник

АВ

Александр Водянников... in supapro.cxx
Напиши простенький helper с find и вставкой и юзай, будет красивее ))
источник

D

Danya in supapro.cxx
insert_if_absent
источник

M

Mr.Mait in supapro.cxx
tamtakoe
Подскажите, как лучше вставить в мапу ключ с дефолтным значением, если такого колюча нет. Пока так делаю, но смущает постоянный вызов find. Может быстрее в try-catch завернуть и при ошибке сетить дефолтное значение?
using Item = map<string, variant<string, double>>;
Item item = {{"a", 1}};

if (item.find("b") == item.end()) {
   item["b"] = 0;
}
А если просто написать так
item["b"];


Ведь по сути, если не найдет ключ, то создатся ключ и стандартное значение будет value_type (x, T ())
https://en.cppreference.com/w/cpp/container/map/operator_at
источник

АВ

Александр Водянников... in supapro.cxx
Mr.Mait
А если просто написать так
item["b"];


Ведь по сути, если не найдет ключ, то создатся ключ и стандартное значение будет value_type (x, T ())
https://en.cppreference.com/w/cpp/container/map/operator_at
А если найдёт - заменит
источник

D

Danya in supapro.cxx
Александр Водянников
А если найдёт - заменит
Не заменит
источник

АВ

Александр Водянников... in supapro.cxx
А если просто написать без присвоения ?
источник

D

Danya in supapro.cxx
Александр Водянников
А если просто написать без присвоения ?
Ну мы про это же
источник

D

Danya in supapro.cxx
Mr.Mait
А если просто написать так
item["b"];


Ведь по сути, если не найдет ключ, то создатся ключ и стандартное значение будет value_type (x, T ())
https://en.cppreference.com/w/cpp/container/map/operator_at
Я думал об этом, но это неочевидный код
источник

t

tamtakoe in supapro.cxx
Mr.Mait
А если просто написать так
item["b"];


Ведь по сути, если не найдет ключ, то создатся ключ и стандартное значение будет value_type (x, T ())
https://en.cppreference.com/w/cpp/container/map/operator_at
У меня такая запись Debug Error выдает
источник

D

Danya in supapro.cxx
tamtakoe
У меня такая запись Debug Error выдает
Более конкретно говори
источник

t

tamtakoe in supapro.cxx
Danya
Более конкретно говори
источник

AS

Anatoly Shirokov in supapro.cxx
Напоминаю, здесь чат для обсуждения С++, все смежные тему или восторги, хейтинг и т.п. это не сюда точно
источник

M

Mr.Mait in supapro.cxx
Можно вообще извратиться со стандартным значением :)
void checkItem(std::string key) {
   try {
       item[key];
       std::get<double>(item[key]);
   }
   catch(const std::bad_variant_access&) {
       item[key] = 0; // set default
   }
}
источник

АВ

Александр Водянников... in supapro.cxx
Нафига если есть find??
источник