Индекс нижней границы значения в наборах и картах в c ++ - PullRequest
0 голосов
/ 30 мая 2020

Предположим, я хочу получить индекс нижней границы значения в наборе, и если я набираю

cout<<set.lower_bound(number)-set.begin()<<endl;

, отображается ошибка: нет совпадения для 'operator -'

То же самое касается и карт,

Однако для массивов и векторов, если я использую

lower_bound(begin,end,val)-begin 

, отображается индекс

Почему?

1 Ответ

1 голос
/ 30 мая 2020

Да, это потому, что оператор - не определен для итераторов 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 будут заказаны. Я не знаю, чего вы ожидаете.

И, как сказал Джон, это может быть недостаток дизайна. возможно, вы выбрали не тот контейнер для ваших целей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...