Шрифт:
Приведенное решение работоспособно и достаточно удобно, но не стройте иллюзий насчет того, что оно каким-то волшебным способом обеспечивает поиск точки вставки в контейнер
До настоящего момента рассматривался только случай, когда поиск осуществляется в интервале, определяемом парой итераторов. Довольно часто работать приходится со всем контейнером вместо интервала. В этом случае необходимо различать последовательные и ассоциативные контейнеры. Для стандартных последовательных контейнеров (
Со стандартными ассоциативными контейнерами (
При проверке присутствия значений в контейнерах
Тем не менее при подсчете объектов в ассоциативных контейнерах
Попробуем подвести итог всему, о чем говорилось в настоящем совете. Информация собрана в следующей таблице.
| Алгоритм | Функция контейнера | |||
|---|---|---|---|---|
| Что вы хотите узнать | Несортированный интервал | Сортированный интервал | Для set и map | Для multiset и multimap |
| Присутствует ли заданное значение? | find | binary_search | count | find |
| Присутствует ли заданное значение? И если присутствует, то где находится первый объект с этим значением? | find | equal_range | find | find или lower_bound (см. ранее) |
| Где находится первый объект со значением, не предшествующим заданному? | find_if | lower_bound | lower_bound | lower_bound |
| Где находится первый объект со значением, следующим после заданного? | find_if | upper_bound | upper_bound | upper_bound |
| Сколько объектов имеют заданное значение? | count | equal_range | count | count |
| Где находятся все объекты с заданным значением? | equal_range | equal_range | equal_range | find (итеративный вызов) |
Несколько странно выгладит частое присутствие