Подходит ли std :: find только для контейнеров, элементы которых могут быть не отсортированы?

Мы можем использовать std::find на std::set, но это может быть медленным, потому что std::set имеет функцию-член std::set::find это часто быстрее чем std::find,

Является std::find подходит только для контейнеров, элементы которых не сортируются, например std::list?

Можно std::find запретить пользователю использовать его, чтобы найти что-то на std::set?

2

Решение

Вообще говоря, вы можете использовать станд :: найти со всеми контейнерами, которые предоставляют вам входные итераторы. Вот это информация о станд :: найти с его требованиями итератора.

Главный вопрос — эффективность. Алгоритм ничего не знает о внутреннем представлении контейнера, с которым он работает. Так станд :: найти просто перебирает элементы конкретного контейнера. Нет способа предотвратить обращение с такими контейнерами, как станд :: набор. Более того, это будет противоречить дизайну СТЛ.

Как правило, вы должны предпочесть контейнерные методы алгоритмам с тем же именем.

2

Другие решения

Независимо от контейнера std :: find () всегда будет На) в худшем случае, поскольку под ним просто выполняется линейный итеративный поиск и сравниваются значения, указанные итератором.

Таким образом, он не способен воспользоваться тем, отсортированы ли элементы в этом контейнере, или нет.

И нет, std::find не мешает пользователю что-то найти на std::set,

2

По вопросам рекламы [email protected]