Если вы посмотрите на std::lower_bound()
и std::upper_bound()
документацию, вы увидите, что они предъявляют особые требования к диапазону, к которому они могут применяться:
Диапазон [first, last) должен быть разбит на части по отношению к выражению! (Value
Поскольку std::map
удовлетворяет этому критерию, можно использовать эти обобщенные функции на нем, но такое использование неэффективно, так как эти обобщенные функции не знают о внутреннем представлении.карты.Так что std::map
предоставил свои, более эффективные варианты (хотя и менее общие).std::unordered_map
с другой стороны не удовлетворяет критерию, поэтому вы не можете применять эти обобщенные функции к нему, и поэтому не имеет смысла реализовывать их для самого std::unorderd_map
.
Я, хотя lower_boundвозвращает первый итератор с заданным ключом, это может быть возможно для неупорядоченного контейнера.
Это то, что делает std::find()
.std::lower_bound()
или std::map::lower_bound()
дает вам позицию, из которой элементы диапазона не меньше, чем клавиша.Тот факт, что вы можете использовать его для поиска определенного элемента, является полезным побочным эффектом такого поведения, но не является основной целью этих функций.