Как изменить CompareByNA, чтобы вставка работала, я предполагаю, что первый элемент вставляется неправильно программа: https://onecompiler.com/cpp/3xycp2vju
bool Company::compareByNA(const Company &a, const Company &b)
{
return a.getNameAddr() < b.getNameAddr();
}
..
if ( binary_search(CompanyNameList.begin(), CompanyNameList.end(), cmp, Company::compareByNA) )
{
CompanyNameList.insert(lower_bound(CompanyNameList.begin(), CompanyIDList.end(), cmp, Company::compareByNA), cmp);
return true;
}
return false;
}
например, это не работает для других элементов, которые я хочу вставить по порядку
if (CompanyNameList.size() == 0)
{
CompanyNameList.push_back(cmp);
return true;
}
Ошибка сегментации, нет никакой разницы, когда я использую лямбда
Он должен работать, даже если он возвращает конечный итератор. Откуда именно берется установленная ошибка?
Если коллекция пуста, lower_bound
вернет end
именно туда, куда вы хотите вставить. Нет необходимости в особом случае.
Вы не включили сюда достаточно кода. Мы не знаем, что такое CompanyNameList
или что GetNameAddr
делает.
Вот твоя проблема
lower_bound(CompanyNameList.begin(), CompanyIDList.end(), cmp, Company::compareByNA);
Вы путаете списки. Вы, вероятно, хотели использовать
lower_bound(CompanyNameList.begin(), CompanyNameList.end(), cmp, Company::compareByNA);
Что вы подразумеваете под "не работает"? Не компилируется? Если да, то опубликуйте ошибку компилятора. Кроме того, вам не нужно создавать отдельную функцию
compareByNA
— используйте лямбду.