#c #stdset
#c #stdset
Вопрос:
Допустим, у меня есть набор
s= {1 5 10}
Теперь, если я запускаю цикл для [0,2] и каждый раз проверяю строго нижнюю, чем верхняя, границу набора, как я могу обрабатывать меньшее значение, чем s.begin()
? Смотрите Код для получения дополнительных разъяснений-
set<int>s;
s={1,5,10};
for(auto i:s)
{
cout<<i<<"nn";
for(int j=0;j<3; j)
{
auto it=s.upper_bound(j);
cout<<"For upper_bound of "<<j<<" ->"<<*it<<"~~~";
it--;
cout<<"For strictly lower than upper_bound of "<<j<<" ->"<<*it<<"n";
}
cout<<endl;
}
Здесь For strictly lower than upper_bound of 0 -> 3
.Здесь одним из возможных решений может быть всегда проверка на большее или равное значение , чем s.begin()
.Есть ли какой-нибудь другой лучший способ сделать это?
Ответ №1:
Вы можете вернуть std::optional if (it == s.begin())
и, соответственно, вывести какое-нибудь подходящее значение по умолчанию, например, none.
auto strictly_lower = [amp;] () -> std::optional<int> {
if(it == s.begin()) {
return std::nullopt;
}
it--;
return std::optional{*it};
}();
std::cout<<"For strictly lower than upper_bound of "<<j<<" ->"<< (strictly_lower.has_value() ? std::to_string(*strictly_lower) : "none") <<"n";