Да, это потому, что оператор -
не определен для итераторов std::set
s (двунаправленных итераторов), в то время как он определен для итераторов массивов (итераторов с произвольным доступом).
Вместо этого вы можете используйте std::distance()
, как показано ниже
int main()
{
std::set<int> set {1, 2, 4, 5, 6};
int number = 3;
std::cout<<std::distance(set.begin(), set.lower_bound(number))<<std::endl;
}
И обратите внимание, что ваши set
s будут заказаны. Я не знаю, чего вы ожидаете.
И, как сказал Джон, это может быть недостаток дизайна. возможно, вы выбрали не тот контейнер для ваших целей.