Мы можем использовать std::find
на std::set
, но это может быть медленным, потому что std::set
имеет функцию-член std::set::find
это часто быстрее чем std::find
,
Является std::find
подходит только для контейнеров, элементы которых не сортируются, например std::list
?
Можно std::find
запретить пользователю использовать его, чтобы найти что-то на std::set
?
Вообще говоря, вы можете использовать станд :: найти со всеми контейнерами, которые предоставляют вам входные итераторы. Вот это информация о станд :: найти с его требованиями итератора.
Главный вопрос — эффективность. Алгоритм ничего не знает о внутреннем представлении контейнера, с которым он работает. Так станд :: найти просто перебирает элементы конкретного контейнера. Нет способа предотвратить обращение с такими контейнерами, как станд :: набор. Более того, это будет противоречить дизайну СТЛ.
Как правило, вы должны предпочесть контейнерные методы алгоритмам с тем же именем.
Независимо от контейнера std :: find () всегда будет На) в худшем случае, поскольку под ним просто выполняется линейный итеративный поиск и сравниваются значения, указанные итератором.
Таким образом, он не способен воспользоваться тем, отсортированы ли элементы в этом контейнере, или нет.
И нет, std::find
не мешает пользователю что-то найти на std::set
,