Всем привет, вот есть фрагмент кода, в котором идёт проверка на находимость в мапе похожего ключа, если тип нашёл то возвращает минус 1, не нашёл 1. Мб я чёт не правильно догоняю. Но функция find возвращает итератор. Вылетает в этом коде.
auto search = TableCarryGroup.find(CALLSIGN);
if((*search).first == CALLSIGN){
return 1;
} else
return -1;
Когда элемент не найден, то возвращается итератор на элемент после конца. Обращение к данным через такой итератор недопустимо (поэтому вылетает).
Правильно было бы сделать так:
if(TableCarryGroup.find(CALLSIGN) != TableCarryGroup.end())
return 1;
else
return -1;
Вообще, если у вас есть некий код, который ищет значение в мапе а потом использует его, то правильный паттерн:
auto iter = map.find(key);
if(iter != map.end())
{
// Используем данные
}
else
{
// Вариант когда элемент не найден. Обращяться к данным через итератор нельзя.
}
Если нужна ТОЛЬКО проверка, можно использовать функцию count() - вернет 0, если элемента нет. Работает в map, set.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости